[英]argument of type is incompatible with parameter of type error
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
是一個預處理器宏,它在 Unicode 構建中擴展為GetModuleHandleW
(自 VS 2005 以來 Visual Studio C++ 項目的默認構建模式)。
GetModuleHandleW
需要一個LPCWSTR
字符串參數,即一個const wchar_t*
,它是一個wchar-t
字符串。
因此,當您傳遞一個char
字符串時,您的GetModuleHandle
調用不匹配,但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()
或TEXT()
裝飾你的字符串文字,例如:
uintptr_t gameModule = (uintptr_t)GetModuleHandle(_T("client.dll"));
這將適用於 ANSI 和 UNICODE 構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.