相关疑难解决方法(0)

如何从Native C++调用C#库(使用C++\CLI和IJW)

背景:作为更大任务的一部分,我需要使C#库可以被非托管C++和C代码访问.为了自己回答这个问题,过去几天/几周我一直在学习C++/CLI.

似乎有许多不同的方法来实现使用来自非托管C++和C的C#dll.一些简单的答案似乎是:使用Interlope服务,使用.com.和regasm,使用PInvoke(似乎只从C#到C++),并在C++/CLR中使用IJW(看起来像是Interlope服务).我认为最好设置一个库,它可能是一个CLR包装器,它使用IJW代表本机C++和C代码调用我的C#dll.

细节:我需要将来自c ++代码的string和int的值传递给C#dll,并返回void.

相关性:许多公司有很多借口来混合和匹配C++,C和C#.性能:非托管代码通常更快,接口:托管接口通常更易于维护,部署,并且通常更容易看到,管理员也告诉我们.遗产代码也迫使我们.它就在那里(就像我们爬过的山一样).虽然如何从C#调用C++库的示例很丰富.如何通过Google搜索很难找到如何从C++代码调用C#库的示例,尤其是如果您想要查看更新的4.0+代码.

软件: C#,C++/CLR,C++,C,Visual Studio 2010和.NET 4.0

问题详情:好的多部分问题:

  1. 使用com对象有优势吗?还是PInvoke?还是其他一些方法?(我觉得这里的学习曲线同样陡峭,尽管我确实在Google Land中找到了有关该主题的更多信息.IJW似乎承诺我想要它做什么.我应该放弃寻找IJW解决方案和转而专注于此?)(优势/劣势?)

  2. 我是否正确想象有一个解决方案,我在C++/CLR中编写了一个利用IJW的包装器?我在哪里可以找到关于这个主题的更多信息,并且没有说我没有足够的Google /或者在没有告诉我你在那里看到它的情况下查看MSDN.(我想我更喜欢这个选项,努力编写清晰简单的代码.)

  3. 问题范围缩小:我觉得我的真正问题和需求是回答下面的小问题:如何设置一个非托管C++文件可以在visual studio中使用的C++/CLR库.我认为,如果我可以简单地在非托管C++代码中实例化托管C++类,那么我可能能够解决其余的问题(接口和包装等).我希望我的主要愚蠢是尝试在Visual Studio中设置引用/ #include等,我想可以有其他误解.也许这整个问题的答案可能只是一个教程或指令的链接,可以帮助我解决这个问题.

研究:我一遍又一遍地用谷歌搜索和Binged取得了一些成功.我找到了许多链接,向您展示如何使用C#代码中的非托管库.我承认有一些链接显示如何使用com对象.针对VS 2010的结果并不多.

参考文献: 我已经阅读了很多帖子.我试图解决最相关的问题.有些人似乎非常接近答案,但我似乎无法让他们工作.我怀疑我遗漏的东西非常小,比如滥用关键字ref,或者缺少#include或者使用语句,或者滥用命名空间,或者没有正确使用IJW功能,或者缺少VS的设置需要正确处理编译等.所以你想知道,为什么不包括代码?好吧,我觉得我不在我理解的地方,并期望我必须工作的代码.我想要在一个我理解的地方,当我到达那里时,我可能需要帮助修复它.我将随机包含两个链接,但我不允许在我当前的Hitpoint级别显示所有链接.

http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod

这从两个方向调用托管和非托管代码的代码,从C++到Visual Basic,然后通过C++ CLR返回,当然我对C#感兴趣:http://www.codeproject.com/Articles/9903/Calling -managed码-从-非托管代码和副

c# c++ c++-cli visual-studio-2010 c#-4.0

47
推荐指数
5
解决办法
6万
查看次数

从C++调用C#代码

我需要能够从C++调用任意C#函数.http://www.infoq.com/articles/in-process-java-net-integration建议使用ICLRRuntimeHost :: ExecuteInDefaultAppDomain(),但这只允许我调用具有以下格式的方法:int method(string arg)

调用任意C#函数的最佳方法是什么?

c# interop c++-cli

41
推荐指数
4
解决办法
7万
查看次数

在不使用COM的情况下从C++调用C#方法

有没有办法创建C#对象并从非托管C++调用方法,但没有使用COM Iterop?我正在寻找像JNI(但对于.Net)这样的东西,你可以手动创建VM,创建对象等.

.net c# c++ com interop

6
推荐指数
1
解决办法
5118
查看次数

标签 统计

c# ×3

c++ ×2

c++-cli ×2

interop ×2

.net ×1

c#-4.0 ×1

com ×1

visual-studio-2010 ×1