首先。我想说,我不是C ++程序员。 outlook字符串在visual studio 2015中生成错误,其中包含标题中的消息。
HWND windowHandle = (HWND)FindProcessId("outlook");
功能定义:
DWORD FindProcessId(const std::wstring& processName)
{
PROCESSENTRY32 processInfo;
processInfo.dwSize = sizeof(processInfo);
HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (processesSnapshot == INVALID_HANDLE_VALUE)
return 0;
Process32First(processesSnapshot, &processInfo);
if (!processName.compare(processInfo.szExeFile))
{
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
while (Process32Next(processesSnapshot, &processInfo))
{
if (!processName.compare(processInfo.szExeFile))
{
CloseHandle(processesSnapshot);
return processInfo.th32ProcessID;
}
}
return 0;
}
我在outlook字符串上遇到错误,
HWND windowHandle = (HWND)FindProcessId(**"outlook"**);
我也把一个强制转换为HWND,但我不确定是否有任何运行时编译错误。
答案 0 :(得分:2)
由于您传递的是ASCII字符串而导致错误,而签名需要使用宽字符串。
尝试
HWND windowHandle = (HWND)FindProcessId(L"outlook");
您的签名
DWORD FindProcessId(const std::wstring& processName)
提到它需要wstring
这是一个宽字符串。而你传递的“outlook”与const string&
兼容。因此,您遇到了编译错误。
答案 1 :(得分:1)
您正在使用字符串文字作为std::wstring &
起作用,这是不允许的。
也许你可以通过将字符串作为std::wstring const &
,
DWORD FindProcessId(std::wstring const & processName)
由于"outlook"
字面值是右值,因此它不能绑定到non-const
引用,但将其绑定到const
引用是合法的。