【发布时间】:2010-04-27 09:17:58
【问题描述】:
如何从非托管 c++ 调用托管 c# 函数
【问题讨论】:
如何从非托管 c++ 调用托管 c# 函数
【问题讨论】:
或者使用project of mine 允许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 包装类 described here,实现起来相对容易。
【讨论】:
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
【讨论】: