我必须从System.String(C#)转换为PCTSTR,它将被输入为_nullterminated const char *
到目前为止,我找不到任何可以告诉我如何做到这一点的事情。
从System :: String(C ++ / CLI)转换的大量示例,但我在System.String(C#)上找不到任何内容
我在Visual Studio 2005中工作。
答案 0 :(得分:4)
你应该使用Marshal静态类
var str = "Hello world"
var marshalledStr = Marshal.StringToHGlobalUni(str).ToPointer()
请参阅编组http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
的完整参考资料答案 1 :(得分:4)
当PCTSTR
是const char*
的typedef时,请使用Marshal.StringToHGlobalAnsi。
当PCTSTR
是const wchar_t*
的typedef时,请使用Marshal.StringToHGlobalUni。
在这两种情况下,请在完成后调用Marshal.FreeHGlobal释放内存;尽管您使用了C#,但有问题的内存分配是不受管理的,因此如果您没有正确清理它,则无法进行垃圾回收,将泄漏。
答案 2 :(得分:4)
如果要在PInvoke调用中使用它,可以将参数声明为string
,并使用MarshalAs(UnmanagedType.LPStr)
:
[DllImport("somelib.dll")]
static extern void function([MarshalAs(UnmanagedType.LPStr)] string s);