我得到的错误是:
"DWORD GetModuleFileNameW(HMODULE,LPWSTR,DWORD)' : cannot convert parameter 2 from 'char *' to 'LPWSTR"
在这条线上

GetModuleFileName(NULL, &strL[0], MAX_PATH);

这个代码
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        {
            std::string strL;
            strL.resize(MAX_PATH);
            GetModuleFileName(NULL, &strL[0], MAX_PATH);

            DisableThreadLibraryCalls(hModule);

            if(strL.find("notepad.exe") != std::string::npos)
            {
                gl_hThisInstance = hModule;

                LoadOriginalDll();
            }

            break;
        }
    case DLL_PROCESS_DETACH:
        {
            ExitInstance();

            break;
        }
    }
    return TRUE;
}

最佳答案

MSDN

typedef wchar_t* LPWSTR, *PWSTR;

因此,它期望使用wchar_t *(wchar_t为2个字节或更多),但是&std::string[0]char*(char为字节)。您需要改用std::wstring:
std::wstring strL;

关于c++ - C2664错误,C++对我来说是陌生的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20307188/

10-12 17:53