BCB引用VC的DLL? |
尚未結案
|
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
以下是某個HOOK.DLL(VC6.0編譯通過)
// Hook.cpp : Defines the initialization routines for the DLL.
#include "stdafx.h"
#include "hook.h"
#include
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我想用BCB引用它(要用動態呼叫,不要用implib轉成lib) 請問一下我該怎麼調用呢? 請告訴我怎麼把它載入,和呼叫他出來給BCB使用 void __fastcall TForm1::FormCreate(TObject *Sender) { //這邊還有一段函數調用我不會寫 >.< HINSTANCE DLL; DLL= LoadLibrary("hotkeyhook.dll"); (FARPROC &)KeyboardProc = GetProcAddress(DLL, "KeyboardProc"); //???????????然後?? } //---------------- 很感謝您的指導.... ^0^bluechannel 你好: 你先看看這篇文章中的說法與做法吧
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
HOOK.DLL 之 LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam); 要先宣告一個指標函式型態: typedef LRESULT (CALLBACK *fnKeyboardProc)(int nCode,WPARAM wParam,LPARAM lParam); 再來如您的程式: DLL= LoadLibrary("hotkeyhook.dll");
fnKeyboardProc KeyboardProc = (fnKeyboardProc )GetProcAddress(DLL, "KeyboardProc");
//然後 就直接用它!如:以下是任意給值... 因為我不知道您的用途...
int nCode=1;
WPARAM wParam=2;
LPARAM lParam=3;
KeyboardProc(nCode,wParam,lParam); 這樣就行了! 沒空更新的網頁...
http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw
http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
|
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
抱歉~又來麻煩了 :P
假如用您的方法編譯,我想引用它的AddHotkey
我程式的其中一段....
typedef BOOL (*FAddHotkey)(HWND hWnd,UCHAR cKey,UCHAR cMask);
HINSTANCE DLL= LoadLibrary("hotkeyhook.dll");
FAddHotkey AddHotkey = (FAddHotkey)GetProcAddress(DLL, "AddHotkey");
HWND hwnd=FindWindow(NULL,"xxxxx");
AddHotkey(hwnd,VK_F1,0); 似乎....不能過~哪邊錯了嗎?
給我指導吧...
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: 抱歉~又來麻煩了 :P 假如用您的方法編譯,我想引用它的AddHotkey 我程式的其中一段.... typedef BOOL (*FAddHotkey)(HWND hWnd,UCHAR cKey,UCHAR cMask); HINSTANCE DLL= LoadLibrary("hotkeyhook.dll"); FAddHotkey AddHotkey = (FAddHotkey)GetProcAddress(DLL, "AddHotkey"); HWND hwnd=FindWindow(NULL,"xxxxx"); AddHotkey(hwnd,VK_F1,0); 似乎....不能過~哪邊錯了嗎? 給我指導吧...不知道您指的是那邊有錯?是 compile 時就錯還是 run 時才錯? 而如果您的 hotkeyhook.dll 已經 LoadLibrary 過了,那就不應該再 Load 一次喔! 沒空更新的網頁... http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: http://home.kimo.com.tw/ruru999999/Capture.zip ^.^ 乾脆給大家檔案下載 如果肯幫我測試一下的,感謝了!我有編譯過了,程式碼都沒問題!! 我想引用hook.dll裡的AddHotkey 和DeleteHotkey 對不起,我太笨了,雖然說有時用說的給釣魚的方法比較好 不過就當例外,釣一次給我看看,那我以後就會釣了(如果您肯的話) :p 感恩喔!真是麻煩您了看不到您後來寫的 LoadLibrary 的部分... 如果您已可以順利用 GetProcAddress() 叫用一個,那就連續用 GetProcAddress() 即可,如: HINSTANCE DLL= LoadLibrary("hotkeyhook.dll"); FAddHotkey AddHotkey = (FAddHotkey)GetProcAddress(DLL, "AddHotkey"); FAddHotkey DeleteHotkey = (FDeleteHotkey)GetProcAddress(DLL, "DeleteHotkey"); 之後就直接用 AddHotKey() DeleteHotKey() 另外,如果您要使用向系統註冊 HotKey ,可以參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27489 沒空更新的網頁... http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
xxx.exe raised expection class eacessviolation with message “access violation at address 00000000.read of address,read of address 00000000…..
以上是錯誤訊息 >.<
我只要一調用addhotkey 就會這樣了,
可以的話幫忙測看看吧 ^.^ 感激不盡
因為卡在這,所以很多都寫不下去了 嗚....
為何不我用registerkey()?
因為...沒什麼因為,就是有點小原因,讓我不能用它
不然我還省的麻煩 呼
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: xxx.exe raised expection class eacessviolation with message “access violation at address 00000000.read of address,read of address 00000000….. 以上是錯誤訊息 >.< 我只要一調用addhotkey 就會這樣了, 可以的話幫忙測看看吧 ^.^ 感激不盡 因為卡在這,所以很多都寫不下去了 嗚.... 為何不我用registerkey()? 因為...沒什麼因為,就是有點小原因,讓我不能用它 不然我還省的麻煩 呼老實說,VC我不熟,看您的訊息,像是參數給的格式不對或給的順序不對或根本沒有取到 process。請試試以下: 1. 先檢查是否有取到 HINSTANCE DLL= LoadLibrary("hotkeyhook.dll"); if(DLL==NULL) { // Show Message "取不到" return false; } FAddHotkey AddHotkey = (FAddHotkey)GetProcAddress(DLL, "AddHotkey"); FAddHotkey DeleteHotkey = (FDeleteHotkey)GetProcAddress(DLL, "DeleteHotkey"); if(AddHotkey==NULL || DeleteHotkey==NULL) { // Show Message "DLL 檔案可能有錯!" return false; }2. 我建議您先將 VC 以 C 的方式 export 出來,如: extern "C" { // 這裡放您原來的宣告 }; 在 BCB 用的 .h/.hpp 中也要有。 3. 另開一個新的 project,並使用 __stdcall 來述詞,試試看。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
bluechanel
一般會員 發表:7 回覆:15 積分:4 註冊:2003-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |