本文介绍了托管字符串 - >非托管字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我使用以下代码将托管字符串转换为非托管字符串: _TCHAR错误[255]; const char * umstring =( const char *)Marshal :: StringToHGlobalAnsi (merror).ToPointer(); _tcscpy(错误,umstring); Marshal :: FreeHGlobal(IntPtr((void *)umstring)); 我不能使用StringToHGlobalAuto因为它只返回第一个 字符。 /> 我之前问过为什么,有人说你不能使用StringToHGlobalAuto ,因为我记不起来了,但无论如何它不会工作如此 不要这么说。 但他们也说我需要自己进行unicode检查,但是我 不知道重点是什么 - 因为不是所有的字符串unicode 无论如何? 这让我相信它必须做任何转换不管怎么说我还是需要。 是吗? 如果没有,什么是所需的unicode检查?I use the following code to convert a managed string to an unmanaged one:_TCHAR error[255];const char* umstring = (const char*)Marshal::StringToHGlobalAnsi(merror).ToPointer();_tcscpy(error, umstring);Marshal::FreeHGlobal(IntPtr((void*)umstring));I can''t use StringToHGlobalAuto because it only ever returns the firstcharacter.I asked why a bit ago, and somebody said you can''t use StringToHGlobalAutobecause of something I can''t remember, but in any case it doesn''t work sodon''t say that.But they also said I need to put my own unicode checking around that, but Ican''t see what the point would be - as aren''t all managed strings unicodeanyway?This leads me to believe it must be doing whatever conversions for me Irequire anyway.Is it?If not, what is the required unicode checking?推荐答案 如果你有一个ANSI / MBCS项目,它只能* * 如果你的项目是用_UNICODE / UNICODE编译的那么它不行! 要支持TCHAR,您必须这样做: < code> // #包括< vcclr.h> System :: String * merror = S" Hello world"; _TCHAR错误[255]; #ifdef _UNICODE const __wchar_t __pin * umstring = PtrToStringChars(merror); #else const char * umstring =(const char *)Marshal :: StringToHGlobalAnsi (错误).ToPointer(); #endif _tcscpy(错误,umstring); #ifndef _UNICODE Marshal :: FreeHGlobal(IntPtr((void *)umstring)); #endif < / code> 您还应检查字符串长度!!!! - 问候 Jochen 关于Win32和.NET的博客 http://blog.kalmbachnet.de/ 一般来说:对于字符串转换,请参阅:如何:在Visual C ++中从System :: String *转换为Char * .NET http://support.microsoft.com/kb/311259 / In general: For string conversion see: HOW TO: Convert from System::String* to Char* in Visual C++ .NET http://support.microsoft.com/kb/311259/ 这如果您有ANSI / MBCS项目,则*仅* * 如果您的项目使用_UNICODE / UNICODE编译,那么它将无法正常工作! 要支持TCHAR,您必须执行以下操作: //> include< vcclr.h> = SHello world; _TCHAR错误[255]; #ifdef _UNICODE const __wchar_t __pin * umstring = PtrToStringChars(merror); #else const char * umstring =(const char *)Marshal :: StringToHGlobalAnsi (错误).ToPointer(); #endif _tcscpy(错误,umstring); #ifndef _UNICODE #endif < / code> 你还应检查字符串长度!! !! - Jochen 关于Win32和.NET的博客 http://blog.kalmbachnet.de/ 这篇关于托管字符串 - >非托管字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 09-06 03:37