c++cli-从c#中的myStruct生成IntPtr,但c++dll应为myStruct*,而不是IntPtr
本文关键字:IntPtr myStruct 应为 c++dll 生成 c++cli- 中的 | 更新日期: 2023-09-27 17:59:38
在我的c#main中,我做了
myStruct ret_vals;
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ret_vals));
Marshal.StructureToPtr(ret_vals, ptr, false);
MyStruct中有一个指向另一个结构的指针。根据Intellisense(编译错误),我的C++dll函数需要一个指向MyStruct的指针,而不是IntPtr。以下内容不会编译
DoAT.atClass1 cl = new DoAT.atClass1();
cl.read_file( ptr);
顺便说一句,我的c++函数被声明为
public ref class atClass1
{
public:
int read_file(MyStruct & ret_vals) ;
};
非常感谢您的建议。
在C++/CLI中使用引用时,不应该像在常规C++中那样使用&
,而应该使用%
。这意味着您必须将C++/CLI函数定义为:
public ref class atClass1
{
public:
int read_file(MyStruct % ret_vals);
};
这样,您就可以使用.NET引用参数调用您的函数:
DoAT.atClass1 cl = new DoAT.atClass1();
cl.read_file(ref ret_vals);
不需要Marshal
类!