在我的c#main中,我做了
myStruct ret_vals;
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ret_vals));
Marshal.StructureToPtr(ret_vals, ptr, false);
MyStruct有一个指向其中另一个结构的指针。根据Intelllisense(编译错误),我的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) ;
};
建议表示赞赏。
答案 0 :(得分:2)
在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
班级!