CallWindowProc的問題 |
答題得分者是:windblown
|
CoffeeX
中階會員 ![]() ![]() ![]() 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
主要的目的是要寫一個 global hook, DLL
使用 CallWindowProc( ) 時 我遇到的問題是會出現以下的錯誤: [C Error] Unit1.cpp(41): E2034 Cannot convert 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()' [C Error] Unit1.cpp(41): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void *,unsigned int,unsigned int,long)') 程式碼如下: <textarea class="cpp" rows="10" cols="60" name="code">#include 感謝前輩的指教!
------
=.=??? |
windblown
中階會員 ![]() ![]() ![]() 發表:0 回覆:117 積分:98 註冊:2003-11-14 發送簡訊給我 |
|
CoffeeX
中階會員 ![]() ![]() ![]() 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
前輩您好,我用的是bds2006,
採用了你的方法後便可以, 不過還不太清楚這樣的做法與FARPROC的觀念為何? ===================引 用 文 章=================== 我猜你是用 bcb5, 試試看下面的方法行不行? 如果不行的話,要自己用個 function pointer typedef int (__stdcall *MYPROC)(); 把 FARPROC 改成 MYPROC return CallWindowProc((FARPROC)OldSASProc
------
=.=??? |
windblown
中階會員 ![]() ![]() ![]() 發表:0 回覆:117 積分:98 註冊:2003-11-14 發送簡訊給我 |
FARPROC 就類似 MYPROC, 只不過這是 Borland 維護的,但是,在 bcb5 時的定義為 typedef int (__stdcall *FARPROC)(HWND, UINT, WPARAM, LPARAM);
bcb6 時的定義為 typedef int (__stdcall *FARPROC)(); 而 CallWindowProc() 的第一個參數需要的是 typedef int (__stdcall *FARPROC)(); 因此, 在 bcb5 會有問題,而 bcb6 不會,想不到 bds2006 又發生類似 bcb5 的狀況,因此解決方法就是「強制轉型」成需要的型別 其實,從你 post 的錯誤訊息就可以看出,這個問題就是型別不同,而解決方法就是找到正確的型別而已 ^_^ ===================引 用 文 章=================== 前輩您好,我用的是bds2006, 採用了你的方法後便可以, 不過還不太清楚這樣的做法與FARPROC的觀念為何? ===================引 用 文 章=================== 我猜你是用 bcb5, 試試看下面的方法行不行? 如果不行的話,要自己用個 function pointer typedef int (__stdcall *MYPROC)(); 把 FARPROC 改成 MYPROC return CallWindowProc((FARPROC)OldSASProc |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |