[英]Compiler Error: Invalid Conversion from int* to unsigned int* [-fpermissive]
[英]error: invalid conversion from 'int (*)()' to 'long unsigned int'
我對C ++很陌生,我試圖在這個論壇http://www.blizzhackers.cc/viewtopic.php?p=2483118上理解代碼。 我已經設法解決了大部分錯誤,但是這個讓我難過的是這個函數的代碼給我帶來了問題。
void LoadDll(char *procName, char *dllName)
{
HMODULE hDll;
unsigned long cbtProcAddr;
hDll = LoadLibrary(dllName);
cbtProcAddr = GetProcAddress(hDll, "CBTProc"); // The error points to this line
SetWindowsHookEx(WH_CBT, cbtProcAddr, hDll, GetTargetThreadIdFromProcname(procName));
}
將cbtProcAddr
的定義更改為:
HOOKPROC cbtProcAddr;
編譯器不安,因為您試圖將指針類型值存儲在聲明為保存整數的變量中。 (您可能需要將GetProcAddress()
的結果GetProcAddress()
為HOOKPROC
,因為該函數不知道指向函數的實際簽名,但SetWindowsHookEx()
調用中指針的使用意味着它與HOOKPROC
函數指針類型的簽名。)
GetProcAddress
返回一個FARPROC
(查看編譯器錯誤,它只是int(*)()
的typedef)。 unsigned long
不是FARPROC
,並且兩者之間沒有隱式轉換。
我無法理解為什么要將GetProcAddress
的結果存儲在unsigned long
。 如果檢索要存儲函數指針的函數。 使用正確的類型( SetWindowsHookEx
采用HOOKPROC
)並HOOKPROC
:
HOOKPROC cbtProcAddr;
hDll = LoadLibrary(dllName);
cbtProcAddr = reinterpret_cast<HOOKPROC>(GetProcAddress(hDll, "CBTProc"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.