|
有一个转换为宽字符的函数帮顶帮顶不懂,up看这里 http://social.msdn.microsoft.com/forums/en-US/Vsexpressvc/thread/0f749fd8-8a43-4580-b54b-fbf964d68375/ 代码如下: std::wstring s2ws(const std::string& s) { int len; int slength = (int)s.length() + 1; len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); wchar_t* buf = new wchar_t[len]; MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len); std::wstring r(buf); delete[] buf; return r; } 我也遇到同样的问题了~曾经看到有人这么实现(传说这个函数MS曾实现过,后来不知怎么没了) - C/C++ code
template<typename T> interior_ptr<T> marshal_as (String^ s){ interior_ptr<const System::Char> txt=PtrToStringChars (s); return interior_ptr<T>(txt);}
使用 - C/C++ code
marshal_as<CString>(e->ToString())
以下是一般的方法: - C/C++ code
if ( value->GetType() == String::typeid ) { IntPtr pint = Marshal::StringToHGlobalAnsi( (String^)value ); CString str( (Char*)pint.ToPointer() ); Marshal::FreeHGlobal(pint);}
|