私はあなたの助けが必要です。C#import C DLL。 structの配列ポインタ。の仕方?
C DllをC#プロジェクトにインポートしようとしています。これを実行しながら、私はDllとC#プロジェクトの間の構造体を両方向に渡す必要があります。ここで
はCの定義である:ここで
struct mwBITMAP
{
int bmWidth;
int bmHeight;
BYTE* bmData;
};
は、C#の定義である:
[StructLayout(LayoutKind.Sequential)]
public struct MwRemoteBmp
{
public int Width;
public int Height;
public byte[] Data;
}
私はでDLLのテスト関数にC#のから(データはうまく初期化された)構造体を渡そうとしました参照。幅と高さはどちらも右です。しかし、データはすべて間違っています。
どこでミスをしましたか?
ヒントをありがとう。 – MaoWoo
私はデータメンバのメモリをC#でのみ割り当て、Cの構造体を渡してデータの値を変更するとします。 C#のMarshal.FreeHGlobalを呼び出して、完了後にメモリを解放します。それはOKでしょうか? – MaoWoo
はい、値ではなく、データの* content *を変更する限りです。しかし、ビットマップのサイズを知るまでは、どのくらいのメモリを割り当てるのか分かりません。 SAFEARRAY APIを使用していない場合、GlobalAllocを呼び出すことでCの問題を解決できるため、C#でMarshal.FreeHGlobalを使用できます。 –