从系统转换.字符串到PCTSTR
本文关键字:PCTSTR 字符串 转换 系统 | 更新日期: 2023-09-27 18:05:24
我必须从系统转换。字符串(c#)转换成PCTSTR,类型为_nullterminated const char*
到目前为止,我找不到任何可以告诉我如何做这件事的东西。
大量的例子转换从System::String (c++/CLI),但我找不到任何系统。字符串(c#)
我在Visual Studio 2005中工作
当PCTSTR
是const char*
的类型定义时,使用Marshal.StringToHGlobalAnsi
当PCTSTR
是const wchar_t*
的类型定义时,使用Marshal.StringToHGlobalUni。
在这两种情况下,调用Marshal。FreeHGlobal在你用完内存后释放它;尽管您使用c#,但所讨论的内存分配是非托管的,因此不适合垃圾收集,如果您不正确清理,将泄漏。
应该使用Marshal静态类
var str = "Hello world"
var marshalledStr = Marshal.StringToHGlobalUni(str).ToPointer()
参见编组的完整参考http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
如果您想在PInvoke调用中使用它,您可以将参数声明为string
,并使用MarshalAs(UnmanagedType.LPStr)
:
[DllImport("somelib.dll")]
static extern void function([MarshalAs(UnmanagedType.LPStr)] string s);