簡體   English   中英

C2664錯誤,C ++對我來說是陌生的

[英]C2664 error, C++ which is foreign to me

我得到的錯誤是:

"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;

如果要在不使用寬​​字符串的情況下編譯代碼,請參見此處:

如何在VC ++項目中關閉Unicode?

如果在VC ++中啟用了Unicode,則有如下定義:

#ifdef UNICODE
#define CreateFile  CreateFileW
#else
#define CreateFile  CreateFileA
#endif // !UNICODE

固定:

您是否嘗試過:項目屬性-常規-項目默認值-字符集?

有關“使用多​​字節字符集”和“未設置”選項之間的區別,請參見此問題的答案:關於Visual Studio 2010中的“字符集”選項

從引號里面的鏈接:

這是一個兼容性設置,適用於為未啟用Unicode的Windows的舊版本編寫的舊代碼。 在Windows 9x家族中,Windows ME是最后一個版本。 選中“未設置”或“使用多字節字符集”后,將所有以字符串為參數的Windows API函數重新定義為一個小的兼容性幫助程序函數,該函數將char *字符串轉換為wchar_t *字符串(API的本機字符串類型) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM