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

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

2022-06-13   來源: Delphi編程 

  Order := TInstr(PFunc)(textKey)

  TInStr是一個定義好了的函數類型

  type

  TInStr = function(Source: PChar;Check: Char) Integer;

   利用DLLs實現數據傳輸

   DLLs中的全局內存

  Windows規定DLLs並不擁有它打開的任何文件或它分配的任何全局內存塊這些對象由直接或間接調用DLLs的應用程序擁有這樣當應用程序中止時它擁有的打開的文件自動關閉它擁有的全局內存塊自動釋放這就意味著保存在DLLs全局變量中的文件和全局內存塊變量在DLLs沒有被通知的情況下就變為非法這將給其它使用該DLLs的應用程序造成困難

  為了避免出現這種情況文件和全局內存塊句柄不應作為DLLs的全局變量而是作為DLLs中過程或函數的參數傳遞給DLLs使用調用DLLs的應用程序應該負責對它們的維護

  但在特定情況下DLLs也可以擁有自己的全局內存塊這些內存塊必須用gmem_DDEShare屬性進行分配這樣的內存塊直到被DLLs顯示釋放或DLLs退出時都保持有效

  由DLLs管理的全局內存塊是應用程序間進行數據傳輸的又一途徑下面我們將專門討論這一問題

   利用DLLs實現應用程序間的數據傳輸

  利用DLLs實現應用程序間的數據傳輸的步驟為

   編寫一個DLLs程序其中擁有一個用gmem_DDEShare屬性分配的全局內存塊

   服務器程序調用DLLs向全局內存塊寫入數據

   客戶程序調用DLLs從全局內存塊讀取數據

   用於實現數據傳輸的DLLs的編寫

  用於實現數據傳輸的DLLs與一般DLLs的編寫基本相同其中特別的地方是

   定義一個全局變量句柄

  var

  hMem: THandle;

   定義一個過程返回該全局變量的句柄該過程要包含在exports子句中

  function GetGlobalMem: THandle; export;

  begin

  Result := hMem;

  end;

   在初始化代碼中分配全局內存塊

  程序清單如下

  begin

  hMem := GlobalAlloc(gmem_MOVEABLE and gmem_DDESharenum)

  if hMem = then

  MessageDlg(Could not allocate memorymtWarning[mbOK]

  end

  num是一個預定義的常數

  Windows API函數GlobalAlloc用於從全局內存堆中分配一塊內存並返回該內存塊的句柄該函數包括兩個參數第一個參數用於設置內存塊的分配標志可以使用的分配標志如下表所示

  表 全局內存塊的分配標志

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  標 志 意 義

  

  gmem_DDEShare 分配可由應用程序共享的內存

  gmem_Discardable 分配可拋棄的內存(只與gmem_Moveable連用)

  gmem_Fixed 分配固定內存

  gmem_Moveable 分配可移動的內存

  gmem_Nocompact 該全局堆中的內存不能被壓縮或拋棄

  gmem_Nodiscard 該全局堆中的內存不能被拋棄

  gmem_NOT_Banked 分配不能被分段的內存

  gmem_Notify 通知功能當該內存被拋棄時調用GlobalNotify函數

  gmem_Zeroinit 將所分配內存塊的內容初始化為零

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  有兩個預定義的常用組合是

  GHND = gmem_Moveable and gmem_Zeroinit

  GPTK = gmem_Fixed and gmem_Zeroinit

  第二個參數用於設置欲分配的字節數分配的字節數必須是的倍數因而實際分配的字節數可能比所設置的要大

  由於用gmem_DDEShare分配的內存在分配內存的模塊終止時自動拋棄因而不必調用GlobalFree顯式釋放內存

  返回目錄DELPHI基礎教程

       編輯推薦

       Java程序設計培訓視頻教程

       JEE高級框架實戰培訓視頻教程

  Visual C++音頻/視頻技術開發與實戰

  Oracle索引技術

  ORACLEG數據庫開發優化指南

  Java程序性能優化讓你的Java程序更快更穩定

  C嵌入式編程設計模式

  Android游戲開發實踐指南

[]  []  []  []  


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