我得到的错误是:
"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;
}
答案 0 :(得分:3)
来自MSDN,
typedef wchar_t* LPWSTR, *PWSTR;
所以期望wchar_t *
(wchar_t是2个字节或更多),但&std::string[0]
是char*
(char是一个字节)。您需要使用std::wstring
代替:
std::wstring strL;
答案 1 :(得分:0)
如果您希望在不使用宽字符串的情况下编译代码,请参阅此处:
How do I turn off Unicode in a VC++ project?
如果在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 * strings,API的本机字符串类型。