【发布时间】:2020-03-28 08:19:33
【问题描述】:
我有一个需要使用 Unicode 字符集和多字节的 C++ 应用程序。有没有办法做到这一点?请注意,我的项目需要多字节,我还需要使用这个 Unicode 函数
我在互联网上搜索了很多东西,没有发现任何好东西。
DWORD GetProcId(const wchar_t *procName) // EXPERIMENTING
{
DWORD procId = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap != INVALID_HANDLE_VALUE) {
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof(procEntry);
if (Process32First(hSnap, &procEntry)) {
do {
if (!_wcsicmp(procEntry.szExeFile, procName)) // Error is here
{
procId = procEntry.th32ProcessID;
break;
}
} while (Process32Next(hSnap, &procEntry));
}
}
CloseHandle(hSnap);
return procId;
}
procEntry.szExeFile 只能在 Unicode 字符集上编译,但我需要应用程序使用多字节
【问题讨论】:
-
为什么?多字节模式是传统模式,不推荐使用。
-
密切相关:How To Fix Unicode/MultiByte Compatibility Issues。解决方案是相同的 - 您的函数将 Unicode 字符串作为输入,因此您应该明确使用 API 的 Unicode 版本,而不是您尝试使用的 TCHAR 版本。
-
Win32 API 要么是 Unicode 要么 多字节,而不是两者。 API 宏将根据项目设置自动选择 A 或 W 版本。除非您使用支持 UTF-8 语言环境的较新的 Windows 10 版本,否则切勿使用多字节
-
@phuclv 有时必须使用多字节,以防遗留应用程序需要维护并且转换为 unicode 成本太高