[問題] C++ dll傳遞含有char array的struct

作者: petercoin (彼得幣)   2015-06-05 15:47:18
我手上有一個C++寫的dll
現在在C#寫的程式內使用這個dll
在這個dll內有一個struct
typedef struct _A
{
WCHAR buf[64];
DWORD index;
} A;
會被當成function的參數傳遞
int funA(A *a)
{
a.buf...;
index = ...;
}
現在我想在C#內叫用funA
[DllImport("Mydll.dll", CallingConvention = CallingConvention.StdCall, CharSet
= CharSet.Unicode)]
public static extern int funA(IntPtr a);
有先確認過dll確實有值在buf裡面
但是不管怎樣都沒有辦法得到buf的內容
在猜想會不會是memory沒有正確傳遞?
想請教一下該如何才能正確將dll傳的值抓出來呢?
作者: Litfal (Litfal)   2015-06-07 04:49:00
你有在C#裡面定義struct _A並建立unmanaged記憶體再傳嗎?
作者: petercoin (彼得幣)   2015-06-07 20:51:00
C#內我有定義struct A了 但是unmanaged的記憶體要怎麼宣告 可否幫忙給個關鍵字?
作者: Litfal (Litfal)   2015-06-09 16:36:00
Marshal.StructureToPtr另外你給的資訊不夠,重要的C#端如何定義struct你都沒給依據定義方式不同,欄位可能需要用MarshalAs的屬性去標記還有,你的buf究竟是C++去alloc後傳址給C#、還是C#就alloc完成,lib端只負責填滿記憶體,都會影響到寫法

Links booklink

Contact Us: admin [ a t ] ucptt.com