[英]Made IntPtr from myStruct in c#, but c++ dll is expecting a myStruct*, not an IntPtr
在我的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) ;
};
建議表示贊賞。
在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
級!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.