簡體   English   中英

錯誤:從'int(*)()'到'long unsigned int'的無效轉換

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

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