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