次の C 関数を想定します。
void do_something(const char* str)
後で参照できるように、文字列をどこかに保存します。
さらに、この関数を呼び出すために C# で次のシグネチャを使用しています。
[DllImport("NativeLib")]
static extern void do_something(string str);
さて、このメソッドに文字列を渡すときに何をする必要がありますか:
- 文字列を固定する必要がありますか (でGCHandle.Alloc()) (またはマーシャラーがコピーを作成していますか)?
- ピン留めする必要がある場合、「元の」文字列 (つまり、渡した文字列) を渡す必要がありますGCHandle.Alloc()か? または、戻り値を渡す必要がありGCHandle.AddrOfPinnedObject()ますか?
- stringこの場合、 ( の) 正しいデータ型はあります- do_somethingか? または、- IntPtr代わりに使用する必要がありますか?