簡體   English   中英

如何在C#中編組結構數組?

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

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