从 System.String 转换为 PCTSTR
我必须从 System.String (C#) 转换为 PCTSTR,其类型为 _nulltermerated const char*
到目前为止,我找不到任何可以准确告诉我如何执行此操作的内容。
有很多从 System::String (C++/CLI) 转换的示例,但我在 System.String (C#) 上找不到任何内容,
我正在 Visual Studio 2005 中工作。
I'm having to convert from System.String (C#) into a PCTSTR which would be typed as _nullterminated const char*
So far I can't find anything that can tell me exactly how to do this.
Plenty of examples to convert from System::String (C++/CLI), but I can't find anything on System.String (C#)
I'm working in Visual Studio 2005.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当
PCTSTR
是const char*
的类型定义时,请使用 Marshal.StringToHGlobalAnsi。当
PCTSTR
是const wchar_t*
的类型定义时,请使用 Marshal.StringToHGlobalUni。在这两种情况下,请调用 Marshal.FreeHGlobal 使用完毕后释放内存;尽管您使用 C#,但相关内存分配是不受管理的,因此不符合垃圾回收条件,并且如果您不正确清理它将会泄漏。
When
PCTSTR
is a typedef forconst char*
, use Marshal.StringToHGlobalAnsi.When
PCTSTR
is a typedef forconst wchar_t*
, use Marshal.StringToHGlobalUni.In both cases, call Marshal.FreeHGlobal to free the memory when you're done with it; despite your using C#, the memory allocation in question is unmanaged, so consequently is not eligible for garbage collection and will leak if you don't clean it up properly.
您应该使用 Marshal 静态类
请参阅有关编组的完整参考 http: //msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
You should use Marshal static class
See complete reference on marshalling http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
如果您想在 PInvoke 调用中使用它,只需将参数声明为
string
,并使用MarshalAs(UnmanagementType.LPStr)
:If you want to use it in a PInvoke call, you can just declare the parameter as
string
, and useMarshalAs(UnmanagedType.LPStr)
: