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

Posted

技术标签:

【中文标题】在 C# 和非托管 C++ 之间传递自定义对象【英文标题】:Passing custom objects between C# and unmanaged C++ 【发布时间】:2009-01-25 17:27:48 【问题描述】:

我有一个旧版 DLL,其中包含我需要从 C# 代码调用的几个方法。其中一种方法接收指向另一个 C++ 类的指针,该类位于其他 C++ 程序中,而不是 DLL。

我很确定我需要使用 pinvoke 来回编组对象,但我还没有发现任何关于编组自定义对象的内容。

最好的方法是什么?

【问题讨论】:

【参考方案1】:

你确定它是一个类而不是一个结构吗?毕竟,不同的编译器可能会选择在内存中以不同的方式布局类,这会破坏目标 DLL。

您是否考虑过使用托管 C++ 包装器?

【讨论】:

【参考方案2】:

我会关注 C++/CLI,尽管 COM 互操作可能更容易,具体取决于 C++ 代码的形状。

【讨论】:

【参考方案3】:

如果它只是几个方法使用 swig

【讨论】:

以上是关于在 C# 和非托管 C++ 之间传递自定义对象的主要内容,如果未能解决你的问题,请参考以下文章

在托管代码和非托管代码之间传递非托管结构的安全数组

在 C# 中传递 IntPtr 指针后,在非托管 C++ 代码中分配数组,编组类型

将 BSTR 字符串作为托管代码和非托管代码之间的边界传递(COM 互操作)

P/Invoke 编组和解组 C# 和非托管 DLL 之间的二维数组、结构和指针

从传递回完整对象模型的非托管 C++ 调用 C# 方法

c语言和c++和c#的区别