如何使用unicode和多字节字符集? 我有一个C++应用程序,需要使用Unicode字符集和多字节。有没有办法做到这一点?让我注意到,将我的项目放在多字节上是必要的,我还需要使用这个Unicode函数

如何使用unicode和多字节字符集? 我有一个C++应用程序,需要使用Unicode字符集和多字节。有没有办法做到这一点?让我注意到,将我的项目放在多字节上是必要的,我还需要使用这个Unicode函数,c++,winapi,C++,Winapi,我在网上到处搜索,没有找到什么好东西 DWORD GetProcId(const wchar_t *procName) // EXPERIMENTING { DWORD procId = 0; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap != INVALID_HANDLE_VALUE) { PROCESSENTRY32 procEntry; procEntry.dw

我在网上到处搜索,没有找到什么好东西

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字符集上编译,但我需要应用程序使用多字节您的函数将Unicode字符串作为输入,因此您应该明确使用API的Unicode版本,而不是您尝试使用的TCHAR版本,例如:

DWORD GetProcId(const wchar\u t*procName)
{
dwordprocid=0;
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
if(hSnap!=无效的\u句柄\u值)
{
PROCESSENTRY32W程序条目;
procEntry.dwSize=sizeof(procEntry);
if(Process32FirstW(hSnap和procEntry))
{
做
{
if(!\u wcsicmp(procEntry.szExeFile,procName))
{
procId=procEntry.th32ProcessID;
打破
}
}
while(Process32NextW(hSnap和procEntry));
}
闭合手柄(hSnap);
}
返回procId;
}

您的函数以Unicode字符串作为输入,因此您应该明确使用API的Unicode版本,而不是您尝试使用的TCHAR版本,例如:

DWORD GetProcId(const wchar\u t*procName)
{
dwordprocid=0;
HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
if(hSnap!=无效的\u句柄\u值)
{
PROCESSENTRY32W程序条目;
procEntry.dwSize=sizeof(procEntry);
if(Process32FirstW(hSnap和procEntry))
{
做
{
if(!\u wcsicmp(procEntry.szExeFile,procName))
{
procId=procEntry.th32ProcessID;
打破
}
}
while(Process32NextW(hSnap和procEntry));
}
闭合手柄(hSnap);
}
返回procId;
}

为什么?多字节模式是传统模式,不建议使用。密切相关:。解决方案是相同的-您的函数接受Unicode字符串作为输入,因此您应该显式使用Unicode版本的API,而不是您尝试使用的TCHAR版本。Win32 API是Unicode或多字节,而不是两者都有。API宏将根据项目设置自动选择A或W版本。除非使用UTF-8语言环境的较新Windows 10版本,否则不要使用多字节support@phuclv有时,在需要维护的遗留应用程序以及转换为unicode成本过高的情况下,必须使用多字节。为什么?多字节模式是传统模式,不建议使用。密切相关:。解决方案是相同的-您的函数接受Unicode字符串作为输入,因此您应该显式使用Unicode版本的API,而不是您尝试使用的TCHAR版本。Win32 API是Unicode或多字节,而不是两者都有。API宏将根据项目设置自动选择A或W版本。除非使用UTF-8语言环境的较新Windows 10版本,否则不要使用多字节support@phuclv有时,在需要维护的遗留应用程序以及转换为unicode过于昂贵的情况下,必须使用多字节