如何在代码中同时支持Unicode和多字节字符集? 我必须说我对Win32 C++编程很新,所以我面临一个问题: 有些代码以多字节字符集而不是Unicode字符集编译。 我的代码如何同时支持这两种功能? 例如,这不会仅在Unicode中以多字节编译,而注释向量仅以多字节编译: //vector<char> str2(FullPathToExe.begin(), FullPathToExe.end()); vector<wchar_t> str2(FullPathToExe.begin(), FullPathToExe.end()); str2.push_back('\0'); if (!CreateProcess(NULL, &str2[0], NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) //向量str2(FullPathToExe.begin(),FullPathToExe.end()); 向量str2(FullPathToExe.begin(),FullPathToExe.end()); str2.push_back('\0'); 如果(!CreateProcess)为空, &str2[0],, 无效的 无效的 是的, 0, 无效的 无效的 &嗯, &(圆周率)
用作字符类型(例如如何在代码中同时支持Unicode和多字节字符集? 我必须说我对Win32 C++编程很新,所以我面临一个问题: 有些代码以多字节字符集而不是Unicode字符集编译。 我的代码如何同时支持这两种功能? 例如,这不会仅在Unicode中以多字节编译,而注释向量仅以多字节编译: //vector<char> str2(FullPathToExe.begin(), FullPathToExe.end()); vector<wchar_t> str2(FullPathToExe.begin(), FullPathToExe.end()); str2.push_back('\0'); if (!CreateProcess(NULL, &str2[0], NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) //向量str2(FullPathToExe.begin(),FullPathToExe.end()); 向量str2(FullPathToExe.begin(),FullPathToExe.end()); str2.push_back('\0'); 如果(!CreateProcess)为空, &str2[0],, 无效的 无效的 是的, 0, 无效的 无效的 &嗯, &(圆周率),c++,winapi,unicode,multibyte,C++,Winapi,Unicode,Multibyte,用作字符类型(例如std::vector),即: AWCHAR如果定义了UNICODE,则ACHAR 否则 该类型在WinNT.h中声明为 如下: #ifdef UNICODE typedef WCHAR TCHAR; #else typedef char TCHAR; #endif 您可以使用microsoft提供的宏/typedef,并添加自己的宏/typedef,以支持这两者 TCHAR -> typedef to char/wchar_t _TEXT() ->
std::vector
),即:
AWCHAR
如果定义了UNICODE
,则ACHAR
否则
该类型在WinNT.h中声明为
如下:
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
您可以使用microsoft提供的宏/typedef,并添加自己的宏/typedef,以支持这两者
TCHAR -> typedef to char/wchar_t
_TEXT() -> creates a text constant either wide or multibyte _TEXT("hallo")
可能用于添加,以便您可以使用字符串类而不是向量进行文本操作:
#ifdef UNICODE
typedef std::wstring String;
#else
typedef std::string String;
#endif
您不必同时支持这两个版本,除非您的应用程序必须支持Windows Mobile或Windows 95或更高版本的桌面版本 如果您为当前的桌面或服务器窗口编写,支持“Unicode”就足够了。只需点击
wchar\t
> P< >“新到Win32 C++编程”,我想你的意思是你没有一个现有的大程序,你需要使用“ANSI”字符串。如果是这样,那么为什么要构建“ANSI”版本?只需使用wchar\u t
即可完成所有操作
vector<wchar_t> str2(FullPathToExe.begin(), FullPathToExe.end());
str2.push_back(L'\0'); // Note the prefix.
if (!CreateProcessW(NULL, // Note the W; explicit is better than implicit.
&str2[0],
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi))
向量str2(FullPathToExe.begin(),FullPathToExe.end());
str2.向后推(L'\0');//注意前缀。
如果(!CreateProcessW(NULL,//注意W;explicit比implicit好。
&str2[0],,
无效的
无效的
是的,
0,
无效的
无效的
&嗯,
&(圆周率)
如果您需要使用多字节字符串(例如,用于读取文件,或用于使用
char
而不是wchar\u t
的第三方库),请使用和转换它们。在向量中的何处使用它?为什么不只使用typedef std::basic\u string string代码>?@Georg这甚至更短。美好的