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

Delphi 中動態鏈接庫(dll)的建立和使用[2]

2013-11-23 17:46:50  來源: Delphi編程 

  三 DLL庫的訪問

  訪問DLL庫有兩種方式一種是靜態引用另一種是動態引用

  用靜態引用這種方法裝入DLL要做兩件事情為DLL 庫創建一個輸入單元以及

  用USES把輸入單元連接到要使用DLL 函數的程序模塊中為DLL庫創建的輸入單元與普通的單元的區別僅在於在它的接口處聲明的過程函數並不在它的實現部分給出真正的實現代碼而是用external關鍵字把過程函數的實現細節委托給外部DLL模塊

  external命令的使用語法如下

  procedure /function 過程/函數名;external DLL模塊名;

  下面給出為上面創建的minmaxDLL庫寫的輸入單元源文件testdll pas從中可看出輸入單元 與一般 單元的一些差別代碼如下所示

以下是引用片段
  unit testdll;
interface
uses
function Min (X Y: Integer): Integer;

function Max (X Y: Integer): Integer;
implementation
function Min; external minmaxDLL;
function Max; external minmaxDLL;
end
  一個應用程序若想調用minmaxDLL中的函數只須在其uses語句中加入testdll 單元即可

  動態裝入DLL要用到Windows的三個API函數LoadlibraryFreelibrary和GetprocAddress loadlibrary函數用來裝入DLL庫其調用格式如下

  function loadlobrary (DLLfileNamePchar): THandle:

  當不再需要一個DLL庫時應調用FreeLibrary函數將其釋放以空出寶貴的內存資源其調用格式如下

  procedure FreeLibrary (Libmodule:THandle)

  Libmodule 為由LoadLibrary調用得到的DLL庫句柄在用loadlobrary 函數裝入某個DLL庫和調用FreeLibrary釋放該DLL庫之間的程序段中 可以使用該DLL庫中的過程和函數具體使用方法是用GetprocAddress函數把DLL庫中函數的地址傳遞給程序中某個函數變量再用該變量實現DLL函數的調用GetprocAddress函數聲名如下

以下是引用片段
function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:
如下例所示
type
TTimeRec = record
Second: Integer;
Minute: Integer;
Hour: Integer;
end;
TGetTime = procedure(var Time: TTimeRec);
THandle = Integer;
var
Time: TTimeRec;
Handle: THandle;
GetTime: TGetTime;

begin
Handle := LoadLibrary(DATETIMEDLL);
if Handle <>  then
begin
@GetTime := GetProcAddress(Handle GetTime);
if @GetTime <> nil then
begin
GetTime(Time);
with Time do
WriteLn(The time is  Hour : Minute : Second);
end;
FreeLibrary(Handle);
end;
end;


  在調用動態鏈接庫時應注意 所需動態鏈接庫須與應用程序在同一目錄或Windows System 目錄下

  動態鏈接庫是 Windows下程序組織的一種重要方式使用動態鏈接庫可以極大地保護用戶在不同開發工具不同時期所做的工作提高編程效率

[]  []  


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