[英]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,則有如下定義:
#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.