次の 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
代わりに使用する必要がありますか?