2

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

现在我有相反的情况 - 我需要创建C#现在将从另一个C#项目中使用的项目,但稍后我会将主项目重写为 C++,因此我需要C#从 C++ 访问项目。它应该只提供几种方法:PlaceOrder(void* pointerToStruct) CancelOrder(void* pointerToStruct)和一个回调delegate OrderUpdated(void* pointerToStruct)

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

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

4

2 回答 2

3

您可能希望创建 COM 组件:在 .Net 中创建 COM 组件和 ActiveX 控件

如果你是在 Windows8 中开发,你可能会想到创建 Windows 组件:

在 C# 中创建 Windows 运行时组件

于 2013-06-27T10:19:36.320 回答
1

用 C# 写的 dll 的问题是无法制作导出表(将静态方法标记为正在导出):有DllImportAttribute但 C# 中没有DllExportAttribute。不过有两种方式:

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

也可以看看

是否可以像在 VS C++ 中一样从 C# DLL 导出函数?

于 2013-06-27T10:38:10.843 回答