如何从非托管c ++中调用托管c#函数
答案 0 :(得分:9)
或者使用允许C#创建非托管导出的project of mine。可以像使用母语一样使用它们。
答案 1 :(得分:5)
我首先使用了COM互操作,但是现在我切换到IJW(它只是工作),因为它更简单。我有一个包装器C ++ / CLR DLL(用/ clr编译)。
一个简单的例子(使用静态来简化调用):
namespace MyClasses
{
public class MyClass
{
public static void DoSomething()
{
MessageBox.Show("Hello World");
}
}
}
在DLL中,我可以引用命名空间,如下所示:
using namespace MyClasses;
并称之为:
__declspec(dllexport) void CallManagedCode()
{
MyClass::DoSomething();
}
现在您有一个非托管DLL导出“CallManagedCode”,它会调用托管代码。
当然,您还必须在托管/非托管边界之间转换数据。从VS2008开始,Microsoft包含一个marshal-helper,用于在非托管类型和托管类型之间进行转换。见http://msdn.microsoft.com/en-us/library/bb384865.aspx
答案 2 :(得分:1)
我使用了C ++ / CLI包装器类described here,它实现起来相对容易。
答案 3 :(得分:0)
RE:如何从非托管C ++应用程序调用托管C#代码?
从非托管C ++代码调用托管.NET C#COM对象...
http://www.codeproject.com/KB/cs/ManagedCOM.aspx
在非托管C ++项目中包装托管C#DLL:dll。
http://www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html