如何使用托管代码从非托管代码?

问题描述:

如何从本机C++(非托管代码)调用.NET代码?我想将.NET代码暴露给我的非托管(C++)应用程序,然后使用它们。更具体地说,我想从本机C++调用C#)。我知道有很多方法,但你能告诉我每个人的利弊吗?顺便说一句,我不想​​使用COM,所以现在有什么选择?如何使用托管代码从非托管代码?

是否有可能我用C++/CLI封装C#代码,然后从C++调用它?如果是这样,我该怎么做?如何在C++/CLI中包装C#,然后从C++调用它?

+0

[将dll函数导出到非托管程序](http://stackoverflow.com/questions/12647766/exporting-dll-functions-to-unmanaged-programs) – Rohit 2013-10-18 04:39:48

您可能将expose托管组件作为COM对象。

我写这件事刚刚结束。这是关于德尔福的,但这并不意味着它也不适用于C++。

.NET component in DELPHI 2009

即使不知道太多关于C++,我还是知道IUnknown和COM兼容的接口引用应该是使用由C就好++(在你需要传递对象,不只是结构的情况下)。

  • 您可以使用Microsoft的C++/CLI引用您的C#代码并将其导出为普通的DLL函数。
  • 您还可以下载我编写的MSBuild task,它允许您直接从C#中导出函数。类似于如何使用DllImportAttribute。

此C#代码将导出一个函数“YourExportName”,可以像使用任何c兼容函数一样使用该函数。


class Sample 
{ 
    [DllExport("YourExportName")] 
    static int TestFunction(int left, int right) 
    { 
    return left + right; 
    } 
} 

你总是可以嵌入单声道。到目前为止,我已经亲自完成了两个项目,这很容易。按照Embedding Mono获取更多信息。