熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:動態鏈接庫編程(二)[1]

2022-06-13   來源: Delphi編程 

   服務器程序的編寫

  服務器程序必須包含對DLL的調用代碼

  function GetGlobalMem: THandle; far; external c:\dlls\glbmem;

  通過調用該函數服務器可以獲得全局內存塊的句柄

  在寫入數據前服務器必須鎖定全局內存以避免在寫入過程中Windows移動該內存塊的位置

  函數GlobalLock鎖定全局內存並返回指向該內存塊的指針

  pMem := GlobalLock(hMem)

  對pMem的任何修改都會反映到全局內存塊中

  對內存塊進行操作後調用GlobalUnLock進行解鎖內存塊操作之後盡早解鎖有利於Windows充分利用內存資源

  服務器寫入數據的實現代碼如下

  var

  hMem: THandle;

  pMem: PChar;

  begin

  hMem := GetGlobalMem; {獲得全局內存塊的句柄}

  if hMem <> then

  begin

  pMem := GlobalLock(hMem) {加鎖全局內存塊}

  if pMem <> nil then

  begin

  StrPCopy(pMemMemotext) {向全局內存塊寫入數據}

  GlobalUnlock(hMem) {解鎖全局內存塊}

  end

  else

  MessageDlg(Couldnot Lock memory blockmtWarning[mbOK]

  end;

   客戶程序的編寫

  客戶程序幾乎是服務器程序的翻版唯一的區別在於一個是寫入數據一個是下載數據

  下面是客戶從全局內存塊下載數據的程序清單

  var

  hMem: THandle;

  pMem: PChar;

  begin

  hMem := GetGlobalMem; {獲得全局內存塊的句柄}

  if hMem <> then

  begin

  pMem := GlobalLock(hMem) {加鎖全局內存塊}

  if pMem <> nil then

  begin

  Memotext := StrPas(pMem) {從全局內存塊讀取數據}

  GlobalUnlock(hMem) {解鎖全局內存塊}

  end

  else

  MessageDlg(Couldnot Lock memory blockmtWarning[mbOK]

  end;

   利用DLLs實現窗體重用

  實現窗體重用是Delphi DLLs功能中一個引人注目的特色當你創建了一個令自己滿意的通用窗體並希望能在不同應用程序中使用特別是希望能在非Delphi 應用程序中使用時把窗體做進一個動態鏈接庫中是最適當的這樣即使用其它工具開發的應用程序如C++Visual Basic等也都可以去調用它

  包含窗體的DLLs有K左右的部件庫(Component Library)開銷可以通過把幾個窗體編譯成一個DLLs來最小化這筆開銷DLl中的不同窗體可以共享部件庫

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25203.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.