我想知道从C ++(Native,而不是C ++ CLI)代码调用c#类方法的方法是什么?需要简单而优雅的方式
答案 0 :(得分:11)
您可以使用所谓的“CLR Hosting”在本机C ++程序中嵌入任何CLR程序集(C#,VB.NET,F#,...)。这就是本机程序(如SQL Server)支持.NET代码扩展的方式。例如。 SQL Server中的 SQL CLR 。
使用CorBindToRuntimeEx()
for .NET 2.0和{4}}在.NET 4中将CLR加载到本机进程。
详细信息可以在CLRCreateInstance()
或Jeff Richter的书MSDN上找到。
答案 1 :(得分:10)
将C#程序集转换为COM可见程序集并使用COM接口。据我所知,这是使它在自制IPC旁边工作的唯一方法。问题来自.NET环境,在该环境下.NET程序集必须运行,C ++在其本机C ++环境下运行。
唯一的通信方式是IPC机制(套接字,......)或使用COM,因为进程必须“解耦”。
以下是基于COM的解决方案的教程:
答案 2 :(得分: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
答案 3 :(得分:-1)
最简单的方法是使用C ++ / CLI。如果您不能在代码中使用它,请编写一个包装器DLL并调用该DLL。