如何从c ++中调用C#

use*_*949 10 c# c++

我想知道从C++(Native,而不是C++ CLI)代码调用ac#class方法的方法是什么?需要简单而优雅的方式

Ale*_*ski 11

您可以使用所谓的" CLR Hosting " 在本机C++程序中嵌入任何CLR程序集(C#,VB.NET,F#,...).这就是本机程序(如SQL Server)支持.NET代码扩展的方式.例如SQL Server中的SQL CLR.

您将CLR加载到使用CorBindToRuntimeEx().NET 2.0和CLRCreateInstance().NET 4 的本机进程中.

可以在MSDN上找到详细信息,或者通过C#在Jeff Richter的书CLR中找到.


jde*_*aan 10

将您的C#程序集转换为COM可见的程序集并使用COM接口.据我所知,这是使它在自制IPC旁边工作的唯一方法.问题来自.NET环境,在该环境下.NET程序集必须运行,C++在其本机C++环境下运行.

通信的唯一方式是IPC机制(套接字,......)或使用COM,因为进程必须"解耦".

这是基于COM的解决方案的教程:

  • 根据Sasha的说法,实际上有两种方式. (2认同)

gid*_*eon 9

Sasha Goldshtein是这个人的人:

还有几种方法可以做到这一点:1.反向P/Invoke(必须从作为回调传递的.NET委托开始,所以这只有在你的.NET代码中开始"动作"时才有用); 2. COM interop(每个.NET类也可以是一个COM对象,有或没有显式接口); 3. C++/CLI包装器类.

http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

另请参阅:http:
//www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx