如何从C++调用C#

10

我想知道如何从 C++(Native,不是 C++ CLI)代码中调用一个 C# 类的方法?需要简单而优雅的方法。


4
虽然这样想很酷,但这个想法会让人感到痛苦。 - user34537
1
可能是从C++调用C#代码的重复问题。 - cdiggins
4个回答

12
你可以使用所谓的 "CLR托管" 在本地C++程序中嵌入任何CLR程序集(如C#、VB.NET、F#等)。这是本地程序(如SQL Server)支持.NET代码扩展的方法,例如 SQL Server 中的 SQL CLR

你可以使用.NET 2.0中的CorBindToRuntimeEx()或.NET 4中的CLRCreateInstance()将CLR加载到本地进程中。
详情请参阅 MSDN 或 Jeff Richter 的书《CLR via C#》。

9
将您的C#程序集转换为COM可见程序集并使用COM接口。据我所知,这是除了自制IPC以外唯一的使其工作的方法。问题在于.NET环境下必须运行.NET程序集,而C++则在其本地C++环境下运行。
通信的唯一方式要么是IPC机制(套接字等),要么就是使用COM,因为进程必须“解耦”。
这里有一个基于COM的解决方案教程:

2
根据 Sasha 的说法,实际上还有另外两种方法。 - gideon
1
是的,没有必要实现所建议的“解耦”。“.Net”环境基本上是mscoree.dll,它可以加载本地进程。 - MSalters

9

Sasha Goldshtein是这方面的专家:

有几种方法可以实现: 1. 反向P/Invoke(必须从作为回调传递的.NET委托开始,因此只适用于“操作”始于您的.NET代码的情况); 2. COM互操作(每个.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


0

最简单的方法是使用C++/CLI。如果您的代码无法使用它,请编写一个包装器dll并调用该dll。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接