没有合适的构造函数可以从“const char [8]”转换为“std :: basic_string <wchar_t,std :: char_traits <wchar_t =”“>,std :: allocator <wchar_t>&gt;”

时间:2015-12-28 08:52:26

标签: c++

首先。我想说,我不是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,但我不确定是否有任何运行时编译错误。

2 个答案:

答案 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引用是合法的。

相关问题