没有合适的构造函数可以从"const char [8]"转换为"std::basic_string<wchar_t, std::char_traits<wchar_t>, std::

no suitable constructor exists to convert from "const char [8]" to "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>"

本文关键字:std char lt wchar gt traits basic string 构造函数 const 转换      更新时间:2023-10-16

首先。我想说,我不是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进行了强制转换,但我不确定是否会出现运行时编译错误。

您收到错误,因为您正在传递ASCII字符串,而签名需要宽字符串。

尝试

HWND windowHandle = (HWND)FindProcessId(L"outlook");

您的签名

DWORD FindProcessId(const std::wstring& processName)

提到它取宽字符串CCD_ 1。您正在传递与const string&兼容的"outlook"。因此,您得到了编译错误。

您使用字符串文字作为std::wstring &,这是不允许的。也许,您可以通过将字符串设为std::wstring const &、来修复

DWORD FindProcessId(std::wstring const & processName)

由于"outlook"文字是一个右值,它不能绑定到non-const引用,但将它绑定到const引用是合法的。

相关文章: