簡體   English   中英

類型參數與類型錯誤參數不兼容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM