簡體   English   中英

在c#中使用myStruct制作IntPtr,但是c ++ dll期待myStruct *,而不是IntPtr

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM