从系统转换.字符串到PCTSTR

本文关键字:PCTSTR 字符串 转换 系统 | 更新日期: 2023-09-27 18:05:24

我必须从系统转换。字符串(c#)转换成PCTSTR,类型为_nullterminated const char*

到目前为止,我找不到任何可以告诉我如何做这件事的东西。

大量的例子转换从System::String (c++/CLI),但我找不到任何系统。字符串(c#)

我在Visual Studio 2005中工作

从系统转换.字符串到PCTSTR

PCTSTRconst char*的类型定义时,使用Marshal.StringToHGlobalAnsi

PCTSTRconst 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);