作为一个Visual C++的新手,有很多种处理字符串的类型。当我使用某些类型并继续编码时,在下一步中会发现内置函数使用其他类型,而且总是需要将一种字符串类型转换为另一种类型。我找到了很多博客,但是当看到这么多答案时感到困惑,尝试了一些方法,有些能够工作,有些则不能。
请给出您的答案或链接,以便在Visual C++中处理不同类型的字符串的最终解决方案。
请给出您的答案或链接,以便在Visual C++中处理不同类型的字符串的最终解决方案。
Win32系统API的操作基于LPCWSTR(wchar_t类型的C风格空字符结尾数组的指针)。 系统头文件提供每个API的两个版本,例如SetWindowTextA(HWND, LPCSTR)和SetWindowTextW(HWND, LPCWSTR),并提供一个宏将SetWindowText()映射到相应的API,取决于项目中UNICODE的定义,即:
#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE
SetWindowTextA() API将从其LPCSTR参数构建临时LPCWSTR,并调用SetWindowTextW(),因此在代码中不使用UNICODE和wchar_t会导致性能损失。
COM接口旨在操作系统分配的BSTR之上,以便在不同进程之间共享。
令人高兴的是,可以使用MS编译器提供的_bstr_t类从LPCWSTR构建BSTR:_bstr_t myBstr(/LPCWSTR/ psText)。
ATL::CString和MFC CString类(它们共享大部分代码)使用相同的宏机制,并映射到CStringA或CStringW。两者都有一个内置的运算符(CStringA :: operator LPCSTR() CStringW :: operator LPCWSTR()),因此您可以将CString传递给Win32 API:
CString myStr = _T("Hello");
::SetWindowText(myHwnd, myStr);
std::[w]string没有这样的内置运算符,但有一个c_str()成员函数可以实现相同的功能:
std::wstring myStr = L"Hello"; // assuming UNICODE defined
::SetWindowText(myHwnd, myStr.c_str());
摘要:
(#include <atlstr.h>
不包括ATL库)或std :: wstring。
CString
现在是MFC和ATL之间的“共享”类(即,您可以使用CString
而不必引入MFC框架):http://msdn.microsoft.com/en-us/library/zzs00fs6.aspx - Michael Burr