私はC#で次の構造を持っています:
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct RECORD
{
public uint m1;
public uint m2;
public uint m3;
}
これらの構造体の配列(固定長)をネイティブコードに渡す必要があります。ネイティブコードは、これらの構造体にデータを書き込みます。配列はC#で割り当てられ、Cdllに渡されます。インポートした関数を次のように宣言しました。
[DllImport("marshall.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void doIt(RECORD[] dataRecord);
しかし、私はデータを取り戻しません。私はすでにPInvokeInteropAssistantを試しました。ここで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
}