線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2065
推到 Plurk!
推到 Facebook!

BCB引用VC的DLL?

尚未結案
bluechanel
一般會員


發表:7
回覆:15
積分:4
註冊:2003-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-24 22:08:04 IP:218.165.xxx.xxx 未訂閱
以下是某個HOOK.DLL(VC6.0編譯通過) // Hook.cpp : Defines the initialization routines for the DLL. #include "stdafx.h" #include "hook.h" #include  #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define MAX_KEY 100 #define CTRLBIT 0x04 #define ALTBIT 0x02 #define SHIFTBIT 0x01 ///////////////////////////////////////////////////////////////// #pragma data_seg("shareddata") HHOOK hHook =NULL; UINT nHookCount =0; static UCHAR HotKey[MAX_KEY] = {0}; //hotkey static UCHAR HotKeyMask[MAX_KEY] = {0}; //flag for hotkey, value is VK_CONTRL or VK_NEMU or VK_SHIFT static HWND hCallWnd[MAX_KEY] = {0}; //window associated with hotkey static int KeyCount =0; static UCHAR MaskBits =0; //00000 Ctrl Alt Shift #pragma data_seg() //////////////////////////////////////////////////////////////// HINSTANCE hins; void VerifyWindow(); ///////////////////////////////////////////////////////////////////////////// // CHookApp BEGIN_MESSAGE_MAP(CHookApp, CWinApp) //{{AFX_MSG_MAP(CHookApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHookApp construction CHookApp::CHookApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CHookApp object CHookApp theApp; LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) { BOOL bProcessed=FALSE; if(HC_ACTION==nCode) { if((lParam&0xc0000000)==0xc0000000){// Key up switch(wParam) { case VK_MENU: MaskBits&=~ALTBIT; break; case VK_CONTROL: MaskBits&=~CTRLBIT; break; case VK_SHIFT: MaskBits&=~SHIFTBIT; break; default: //judge the key and send message break; } for(int index=0;index1){ nHookCount--; return TRUE; } BOOL unhooked = UnhookWindowsHookEx(hHook); if(unhooked==TRUE){ nHookCount=0; hHook=NULL; } return unhooked; } BOOL __declspec(dllexport) __stdcall AddHotkey(HWND hWnd,UCHAR cKey,UCHAR cMask) { BOOL bAdded=FALSE; for(int index=0;index.< HINSTANCE DLL; DLL= LoadLibrary("hotkeyhook.dll"); (FARPROC &)KeyboardProc = GetProcAddress(DLL, "KeyboardProc"); //???????????然後?? } //---------------- 很感謝您的指導.... ^0^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-25 09:58:04 IP:203.73.xxx.xxx 未訂閱
引言: 我想用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-26 00:40:26 IP:218.165.xxx.xxx 未訂閱
呵呵~感謝您的提醒 不過....總覺得他說的沒有我想要的東東 已經看過很多網站了 還是不太會用 誰可以教一下的,感恩啊 已經卡再這卡很久了
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-26 17:23:51 IP:61.231.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-26 20:16:27 IP:218.165.xxx.xxx 未訂閱
感謝兩位版主的回答 不過dllee回答的比較清楚 所以分數就給他了 :p
bluechanel
一般會員


發表:7
回覆:15
積分:4
註冊:2003-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-26 22:22:37 IP:218.165.xxx.xxx 未訂閱
抱歉~又來麻煩了 :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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-27 12:13:17 IP:61.231.xxx.xxx 未訂閱
引言: 抱歉~又來麻煩了 :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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-27 16:30:15 IP:218.165.xxx.xxx 未訂閱
http://home.kimo.com.tw/ruru999999/Capture.zip ^.^ 乾脆給大家檔案下載 如果肯幫我測試一下的,感謝了!我有編譯過了,程式碼都沒問題!! 我想引用hook.dll裡的AddHotkey 和DeleteHotkey 對不起,我太笨了,雖然說有時用說的給釣魚的方法比較好 不過就當例外,釣一次給我看看,那我以後就會釣了(如果您肯的話) :p 感恩喔!真是麻煩您了
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-27 17:59:48 IP:61.231.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-27 21:45:04 IP:218.165.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-28 10:47:48 IP:61.231.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-31 19:12:02 IP:218.165.xxx.xxx 未訂閱
問題是發生在 我一直把注意力放在CB身上,沒有注意到VC沒有用 標準的C extern出去 所以Name Mangling 錯誤啦... 希望大家以後也可以注意到喔 感謝一直幫忙的版主們~
系統時間:2024-05-04 14:38:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!