いくつかのパラメーターを受け取り、メモリを割り当て、ポインターを返す外部メソッドがあります。
[DllImport("some.dll", CallingConvention = CvInvoke.CvCallingConvention)]
public static extern IntPtr cvCreateHeader(
Size size,
int a,
int b);
管理されたアプリケーションに管理されていないメモリを割り当てるのは悪い習慣であることをよく知っていますが、この場合、dll はサード パーティであるため選択の余地がありません。
メモリを解放する同等の関数があり、割り当てられた配列のサイズはわかっています。
- 返されたポインターをピン留めして、GC が (危険にならないように) 移動しないようにするにはどうすればよいですか? このポインターはクラス全体で広く使用されているため、「固定」はそれを行いませんか?
- この p/Invoke のためのより良い方法論はありますか?