从非托管c ++调用托管c#函数

如何从非托管c ++调用托管c#函数

或者使用我的一个项目 ,允许C#创建非托管导出。 这些可以像使用母语一样使用。

我首先使用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

我使用了这里描述的 C ++ / CLI包装器类,它实现起来相对容易。

RE:如何从非托管C ++应用程序调用托管C#代码?

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop/2005-05/msg00030.html

从非托管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