C2664编译错误:GetModuleHandleW参数类型不兼容问题咨询
报错代码:
uintptr_t gameModule = (uintptr_t)GetModuleHandle("client.dll");报错信息:
错误 C2664 'HMODULE GetModuleHandleW(LPCWSTR)': 无法将参数 1 从'const char [11]'转换为'LPCWSTR'
报错原因
你的Windows项目默认开启了Unicode字符集,Win32 API会自动适配字符集做宏映射:GetModuleHandle不是实际存在的函数,只是一个宏,在Unicode配置下会被展开为宽字符版本GetModuleHandleW,要求输入参数为宽字符串指针LPCWSTR。你传入的普通字符串"client.dll"是窄字符类型const char*,类型不匹配触发编译错误。
可用解决方案
- 方案1:修改字符串为宽字符字面量(最推荐,适配项目默认配置,无额外副作用)
只需要在字符串前加L前缀即可:uintptr_t gameModule = (uintptr_t)GetModuleHandle(L"client.dll"); - 方案2:显式调用窄字符版本API
不修改字符串的前提下,直接调用窄字符版本的GetModuleHandleA:uintptr_t gameModule = (uintptr_t)GetModuleHandleA("client.dll"); - 方案3:修改项目全局字符集配置(不推荐,会影响所有Win32 API的默认映射)
操作步骤:打开项目属性页 → 选择「高级」选项卡 → 字符集下拉选择「使用多字节字符集」 → 保存配置后重新编译即可。
内容的提问来源于stack exchange,提问作者tobee
相关产品推荐
相关产品推荐

