请建议在 C# 和 C++ 之间传递数据的基础设施

Posted

技术标签:

【中文标题】请建议在 C# 和 C++ 之间传递数据的基础设施【英文标题】:Please suggest infrastructure for passing data between C# and C++ 【发布时间】:2011-05-18 18:01:30 【问题描述】:

我在this project 中使用 P/invoke 在 C# 和 C++ 之间进行互操作。我想传递对称定义的数据结构。最好的基础设施是什么?协议缓冲区在这里有用吗?

【问题讨论】:

【参考方案1】:

我建议使用 C++/CLI,因为您可以在两个世界中使用相同的头文件/定义文件。开发 C++ CLI 的主要目标之一是填补托管世界和非托管世界之间的空白。 This文章给你更多优势。

在 MSDN 中有 a nice description C++cli 如何工作以及如何使用它。

另见here

【讨论】:

【参考方案2】:

如果可以选择,您可能需要考虑使用 COM。定义 COM 可见且具有 InterfaceType ComInterfaceType.InterfaceIsDual 的 .NET 类,并使用 MarshalAs(UnmanagedType) 属性装饰每个参数,然后 C++ 应用可以编组可在托管代码和非托管代码之间传递的对象。

处理“对称定义”是因为接口是在 COM 中定义的,而且与直接 P/Invoke 相比,COM 为您提供了更多的错误处理和对正在发生的事情的可见性。

【讨论】:

以上是关于请建议在 C# 和 C++ 之间传递数据的基础设施的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 和 C# 之间传递字符串参数?

在 C++ DLL 和 C# 类之间来回传递变量

在 C# 库和 C++ (CLR) 之间传递对象

如何在托管 (C#) 和非托管 (C++) 代码之间来回传递数组内容

在 C# 和非托管 C++ 之间传递自定义对象

当结构仅在运行时已知时,将结构从 c++ 传递到 c#