1

我正在尝试返回进程 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 *'

我该如何解决它,我尝试了几种不同的转换,但无法做到。

4

2 回答 2

1

pe32.szExeFile显然是一个WCHAR字符串,而不是普通的char *C 字符串。您需要在比较之前对其进行转换。或者,转换ProcNameWCHAR字符串,然后使用宽字符串比较函数。

对Visual Studio 文档的快速检查表明您可能正在寻找该wcscmp函数。

于 2013-09-23T20:41:01.353 回答
0

您正在尝试将宽字符串与窄字符串进行比较。既然ProcName是窄字符串,那一定pe32.szExeFile是宽字符串。这并不奇怪,因为 Windows 在内部使用宽字符。您应该更改char* ProcNamewchar_t* ProcName,并使用wcscmp而不是strcmp

于 2013-09-23T20:41:57.017 回答