C#からPInvokeを介してC関数を呼び出し、構造体へのポインタを渡す必要があります。この構造体にもポインタが含まれています。C#からC関数を呼び出し、ポインタを含む構造体を渡す
構造体は、関数宣言は、C#で
void myFunc(myStruct *a);
に簡略化することができる
struct myStruct {
int myInt;
float *myFloatPointer;
}
、私はそのような
[DllImport("my_library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void myFunc(ref myStruct a);
としての機能を宣言するCに簡略化することができます残念ながら、C#でポインタのパラメータを指定して構造体を宣言する方法を決定することはできません。
C関数は、floatポインタが指すメモリを割り当てず、変更するだけです。私はunsafeキーワードを使用せずにこれを解決することをお勧めします。
float []を使ってPInvokeで関数を呼び出すのに成功しましたが、ここではうまくいきません。
ありがとうございます。
私はしばらくの間C#をやっていませんが、 'unsafe'キーワードはあなたが宣言してポインタを使用できると信じています – stackptr
まずポインタが指しているものを理解する必要があります。スカラー?アレイ?誰がそれを割り当てるのですか?なぜそれを書きますか? –
これはC++です。有効ではありません。 –