将StringBuilder传递给PInvoke函数
在其中一篇标题为“调用c ++方法,返回一个字符串,来自c#”
它说,要使下面的Pinvoke工作,将C ++签名改为as
extern "C" REGISTRATION_API void calculate(LPSTR msg)
C ++代码
extern "C" REGISTRATION_API void calculate(char* msg)
C#代码
[DllImport("thecpp.dll", CharSet=CharSet.Ansi)] static extern void calculate(StringBuilder sMsg);
如何将stringBuilder作为一个类,转换为long ptr为string。(但这是接受的答案)
难道我们不能使用IntPtr如下?
extern "C" REGISTRATION_API void calculate(Intptr msg)
寻找标记为“传递字符串”的部分,编组者已经有一些额外的智能来做这个技巧。
http://msdn.microsoft.com/en-us/library/aa446536.aspx
要在完整的.NET Framework中解决此问题(因为许多Win32 API需要字符串缓冲区),您可以传递一个System.Text.StringBuilder对象; 一个指针将由编组程序传递给可以操作的非托管函数。 唯一需要注意的是StringBuilder必须为返回值分配足够的空间,否则文本将溢出,导致P / Invoke抛出exception。