我正在尝试返回进程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 *'
我如何修复它,我尝试了几次不同的转换,但无法做到。
答案 0 :(得分:1)
pe32.szExeFile
显然是WCHAR
字符串,而不是普通的char *
C字符串。您需要在比较之前进行转换。或者,将ProcName
转换为WCHAR
字符串,然后使用宽字符串比较函数。
快速检查Visual Studio documentation表示您可能正在寻找wcscmp
功能。
答案 1 :(得分:0)
您正在尝试将宽字符串与窄字符串进行比较。由于ProcName
是窄字符串,因此pe32.szExeFile
必须是宽字符串。因为Windows内部使用宽字符,所以并不奇怪。您应该将char* ProcName
更改为wchar_t* ProcName
,并使用wcscmp
代替strcmp
。