如何在代码中同时支持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
),即:

A
WCHAR
如果定义了
UNICODE
,则A
CHAR
否则

该类型在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这甚至更短。美好的