全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1093
推到 Plurk!
推到 Facebook!

DLL 的 Handle 問題

尚未結案
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-08 13:32:07 IP:211.22.xxx.xxx 未訂閱
請問一下,以下是BCB深度歷險,我的控制台範例程式碼 這一個專案設定輸出的附檔名為 CPL (控制台用的DLL) THandle hCPL = (THandle)Handle; // Conform to type checking 請問一下這一個 Handle 指的是哪一個 Handle? 1.在輸出為 EXE 的一般 Application ,如果在 Form1 中出現 Handle 不知應該指的是 Form1->Handle 偷懶的寫法,還是 Application->Handle呢? 2.但是,如果在DLL ,這個Handle 指的是誰的 Handle 呢?
 
void __fastcall TForm1::TrvCPLDblClick(TObject *Sender)
{
  HINSTANCE hLib;
  TCPLApplet CPLProc;    //  指向 CPlApplet 函式的函式指標
  TTreeNode* ANode; 
  TCPLInfo CPLInfo;      // 用來取得元件資訊的結構 
  ANode = TrvCPL->Selected;
  if ( ANode == NULL || ANode->Level != 1 )
    return; 
  //  載入 CPL 檔, CPL 檔名即為元件節點的父節點標題
  hLib = LoadLibrary(ANode->Parent->Text.c_str());
  if (!hLib)
  {
    ShowMessage("無法載入 "   ANode->Parent->Text);
    return;
  } 
  //  取得 CPlApplet 函式位址
  CPLProc = (TCPLApplet)GetProcAddress(hLib, "CPlApplet");
  if (CPLProc)
  {
    THandle hCPL = (THandle)Handle;  // Conform to type checking
 
    //  啟動元件, 元件編號即是此節點的次序 (ANode.Index)
    CPLProc(hCPL, CPL_INIT, 0, 0);
    memset(&CPLInfo, 0, sizeof(TCPLInfo));
    CPLProc(hCPL, CPL_INQUIRE, ANode->Index, (Longint)&CPLInfo);
    CPLProc(hCPL, CPL_DBLCLK, ANode->Index, CPLInfo.lData);
    CPLProc(hCPL, CPL_STOP, ANode->Index, CPLInfo.lData);
    CPLProc(hCPL, CPL_EXIT, 0, 0);
  }
  FreeLibrary(hLib);  //  別放了釋放 CPL 檔
}
dllee
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-09 10:57:11 IP:61.231.xxx.xxx 未訂閱
1. 如果是 EXE 應該是用 Application->Handle 2. 如果是 DLL 應該是在 DLL 主程式
BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
);
中的 hinstDLL 的值,所以,您必須在您的 DLL 主程式中把 hinstDLL 的數值存下並傳給需要的表單或函式。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
dllee
站務副站長


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-09 10:58:13 IP:61.231.xxx.xxx 未訂閱
關於 DLL 可以參考:    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
BGman
初階會員


發表:28
回覆:85
積分:42
註冊:2003-01-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-09 21:51:49 IP:211.76.xxx.xxx 未訂閱
我終於搞懂 THandle hCPL = (THandle)Handle; 只是 CPLProc((THandle)Form1->Handle, CPL_INIT, 0, 0); 的方便寫法 對不起,佔了一些小篇幅!
系統時間:2024-04-29 18:08:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!