c++ - 类型的参数与类型错误的参数不兼容
问题描述
uintptr_t gameModule = (uintptr_t)GetModuleHandle("client.dll");
严重性代码描述项目文件行抑制状态错误 C2664 'HMODULE GetModuleHandleW(LPCWSTR)':无法将参数 1 从 'const char [11]' 转换为 'LPCWSTR'
解决方案
uintptr_t gameModule = (uintptr_t)GetModuleHandle("client.dll");
HMODULE GetModuleHandleW(LPCWSTR)':无法将参数 1 从 'const char [11]' 转换为 'LPCWSTR'
"client.dll"
是一个char
字符串 ( const char [11]
)。
根据Windows API TCHAR 模型,GetModuleHandle
是一个预处理器宏,它GetModuleHandleW
在 Unicode 构建中扩展(自 VS 2005 以来 Visual Studio C++ 项目的默认构建模式)。
GetModuleHandleW
需要一个LPCWSTR
字符串参数,即 a const wchar_t*
,它是一个wchar-t
字符串。
因此,您的GetModuleHandle
调用不匹配,因为您传递了一个char
字符串,但是GetModuleHandle
(扩展为GetModuleHandleW
)需要一个wchar_t
字符串(LPCWSTR
)。
您可以修复此错误传递L"client.dll"
而不是"client.dll"
; 实际上,L"client.dll"
(注意L前缀)是一个wchar_t
字符串:
// Pass L"client.dll" instead of "client.dll"
uintptr_t gameModule = (uintptr_t)GetModuleHandle(L"client.dll");
另一种选择是显式调用“ANSI”函数GetModuleHandleA
:
// Explicitly call GetModuleHandleA
uintptr_t gameModule = (uintptr_t)GetModuleHandleA("client.dll");
但我会坚持使用 Unicode API。
你甚至可以完全接受 TCHAR 模型,并用_T()
or装饰你的字符串文字TEXT()
,例如:
uintptr_t gameModule = (uintptr_t)GetModuleHandle(_T("client.dll"));
这适用于 ANSI 和 UNICODE 版本。
推荐阅读
- parse-platform - 解析服务器 Saas(角色或多个安装)
- python - 在 python 中通过字符串和列表工作
- sql-server - Visual Studio 调试器无法登录 SQL Server
- oauth-2.0 - 刷新 OAuth2 访问令牌
- laravel-5 - Laravel 5.6 如何在模态窗口中填充选择
- java - spring-data-jdbc 依赖项不适用于 pom.xml
- angular - Angular 5:显示来自服务器响应的 html 和 xml
- php - 如何在 Laravel 中使用控制器将数据更新到数据库 - 错误非静态方法
- dojo - 最佳实践 - 将 dojo/dijit 升级到 dojo2 应用程序
- c# - 在 LINQ 中转换为十进制(18,2)