创建c#dll,可以从c#和c ++中使用

时间:2013-06-27 10:14:39

标签: c#

我正在将我的解决方案从c#转移到c ++。我创建了几个原生的c ++ dll,它们很好。将原生dll连接到c ++和c#都很容易。对于c#我使用P / Invoke进行方法执行而使用delegate进行回调,我只是将指针传递给非托管内存并使用Marshall类读取它。

现在我有相反的情况 - 我需要创建C#项目NOW将从另一个C#项目中使用但是LATER我会将主项目重写为C ++,所以我需要访问{{1来自C ++的项目。它应该只提供几种方法:C# PlaceOrder(void* pointerToStruct)和一个回拨CancelOrder(void* pointerToStruct)

我正在寻找提示和示例。如何创建可在本机C ++和C#中使用的C#项目,并提供多种方法+一个回调。

特别是我现在不应该对内存做什么 - 我应该在c#中写入非托管内存并在c ++中读取它,还是应该在c#中写入托管内存并以某种方式读取c ++中的托管内存...我在参数中传递的结构指针应该指向非托管内存或托管内存等。

2 个答案:

答案 0 :(得分:3)

您可能需要创建COM组件:Create COM component and ActiveX controls in .Net

如果您在Windows8中进行开发,您可能会想到创建Windows组件:

Creating Windows Runtime Components in C#

答案 1 :(得分:1)

在C#上编写的dll的问题在于,无法创建导出表(将静态方法标记为导出): 有 DllImportAttribute ,但C#中没有 DllExportAttribute 。虽然有两种方式:

  1. 将dll(至少部分)写在专门为此目的设计的托管C ++上。
  2. 在C#源代码编译后更改生成的IL:  例如http://winch.pinkbile.com/wiki/index.php/Main/Dlltool       http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI
  3. 另见

    Is is possible to export functions from a C# DLL like in VS C++?