假设这个 C 函数:
void do_something(const char* str)
它将字符串存储在某处以供以后参考。
此外,我在 C# 中有这个签名来调用这个函数:
[DllImport("NativeLib")]
static extern void do_something(string str);
现在,将字符串传递给此方法时我需要做什么:
- 我是否需要固定字符串(用
GCHandle.Alloc()
)(或者编组器创建副本)? - 如果我确实需要固定它,我是否传递“原始”字符串(即我传递给的字符串
GCHandle.Alloc()
)?还是我需要传递的返回值GCHandle.AddrOfPinnedObject()
? - 在这种情况下是
string
正确的数据类型(for )吗?do_something
还是我应该IntPtr
改用?