8
私は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 Assistantを試しました。ここで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
}
これは、トリック、thxをしました。これらのキーワードが使用される他の場所はありますか?以前は見たことがありません – SDD
MSDNから: [blittable型の配列を参照] ただし、これらの型は実際にはInパラメーターとしてマーシャリングされ、引数をマーシャリングする場合はInAttribute属性とOutAttribute属性を適用する必要がありますIn/Outパラメータ。 – SDD
これは私のために働いてくれてありがとう - これを行うために2時間の苦労を終えた。 –