[英]How to marshall array of structs in C#?
我在C#中有以下結構:
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct RECORD
{
public uint m1;
public uint m2;
public uint m3;
}
我還需要將這些結構的數組 (固定長度)傳遞給本機代碼,后者將一些數據寫入這些結構。 該數組在C#中分配並傳遞給C dll。 我將導入的函數聲明為:
[DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void doIt(RECORD[] dataRecord);
但我沒有得到任何數據。 我已經嘗試過PInvoke Interop助手。 我應該在這里使用IntPtr嗎? 有任何想法嗎?
編輯:
以下是調用本機函數的C#代碼:
RECORD[] rec = new RECORD[256];
doIt(rec);
// values of rec are all zero here
這是C函數:
int doIt(RECORD* rec)
{
// deref pointer and write some data
}
我遠不是P / Invoke專家,但我想知道是否將它作為輸入/輸出參數可能會有所幫助:
DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void doIt([In, Out] RECORD[] dataRecord);
我不會想到這是必要的,就像LayoutKind.Sequential
我希望你的結構已經是一個blittable類型,並且該數組也是blittable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.