我正在尝试返回进程ID,并且我有此代码。我做错了什么?

代码是:

DWORD GetProcId(char* ProcName)//Get ProcessId By Name
{
    PROCESSENTRY32   pe32;
    HANDLE         hSnapshot = NULL;
    pe32.dwSize = sizeof( PROCESSENTRY32 );
    hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

    if( Process32First( hSnapshot, &pe32 ) )
    {
        do{
            if( strcmp( pe32.szExeFile, ProcName ) == 0 )
            {
                return pe32.th32ProcessID;
            }
        }while( Process32Next( hSnapshot, &pe32 ) );
    }

    if( hSnapshot != INVALID_HANDLE_VALUE )
        CloseHandle( hSnapshot );
    return 0;

}

错误是'strcmp' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *'
我如何解决它,我尝试了几次不同的转换,但无法完成。

最佳答案

您正在尝试将宽字符串与窄字符串进行比较。由于ProcName是窄字符串,因此必须是pe32.szExeFile是宽字符串。不足为奇,因为Windows在内部使用宽字符。您应该将char* ProcName更改为wchar_t* ProcName,并使用wcscmp而不是strcmp

08-16 03:40