程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi應用程序中使用DLL

在Delphi應用程序中使用DLL

編輯:Delphi
  Delphi不僅可調用C++產生的DLL模塊,同樣C++程序也可調用Delphi所產生的DLL部件。這樣交互調用,無須重復開發,大大縮短了生產周期。……

  Delphi與VisualBasic、VisualFoxPro等軟件一樣,屬於RAD工具(快速應用開發工具)。適合開發32位或16位/32位混合應用程序。Delphi所使用的程序語言是ObjectPascal,是結構化、面向對象的編譯型語言,具有高執行效率、可重用性、易維護性,及較強的異常處理能力、類封裝能力等。VB與Delphi相比,VB不能對程序進行編譯,只能解釋執行,更重要的不同是Delphi具有較強的繼承性,Delphi的應用程序可編譯DLL模塊,VB卻無法編譯,只能調用C編譯的DLL。而Delphi不僅可調用C++產生的DLL模塊,同樣C++程序也可調用Delphi所產生的DLL部件。這樣交互調用,無須重復開發,大大縮短了生產周期。

   一、用Delphi創建DLL

  Delphi的DLL創建並不復雜,下面向大家介紹Delphi的DLL創建方法。

  1、首先創建一個新的DLL項目(NewProject),因為DLL與調用它的主程序要分開編譯。如果DLL模塊已經建立在調用它的項目中(Project),則將它的窗體(Form)從Project 移出,另建一個新的項目(NewProject)。只需從File菜單選中NewProject項,然後將DLL的Pas模塊文件加入到項目中,再將其自動建立的Form1刪除即可。

  2、在DLL的DPR文件中把Program關鍵字改為Library,申明為動態鏈接庫,在USES語句後面加入ExPorts語句,指明調用DLL的函數名。

  3、如果主程序的DPR文件已有DLL窗體CreateForm的語句,則將其去掉。

  4、在DLL的Pas文件中Type......End後加入該DLL的函數或過程的聲明,形式如:  FunctionName(argment):Boolean;export;

  該函數或過程應加入窗體的Create和Free(產生和釋放)方法。

  5、對項目進行編譯即可。

   二、DLL的調用

  調用DLL有兩種方法,一種是在應用程序裝載時調用,另一種是在應用程序運行時調用。首先介紹裝載時DLL的調用:

  (1)裝載時調用DLL

Pas文件中,對DLL函數進行外部聲明,聲明應位於Implementation的Uses語句後,形式如下:

  Implementation

  UsesDialogs;

  FunctionName(argment):Boolean;far;External′CallName′;

  ......

  其中External關鍵字後面的引號內的字串是DLL的文件名。聲明以後即可在Pas文件任何地方引用DLL函數。

  裝載時調用DLL的優點是速度較快,程序間也可共享代碼。

  (2)運行時調用DLL

  DLL的另一種調用方法是在運行時調用。要調用到Win dows的API函數:loadlibrary,Getprocaddress等。主要用於調用Delphi和其它語言,特別是C++編譯的DLL。

  假定你的DLL包括一個函數:

  FunctionMyFunc(aparam:Word):string;export;

  首先在程序Type類型聲明處加入一句:

  Type

  TMyfuncΚfunction(aparam:Word):string;

  此句的作用如同C++中聲明的函數指針。

  然後定義如下變量∶

  Var

  aptr:TFarproc;

  lhnd:THandle;

  s:string;

  其中Aptr,lhnd兩變量聲明必須有,s是DLL函數返回值,視情況而定。

  在調用DLL處加入如下語句進行DLL裝載:

  lhnd:ΚLoadlibrary(′路徑ιDLL文件名′);{

如lhnd:ΚLoadlibrary(′c:ιaaιbb.dll′);

  aptr:ΚGetprocAddress(lhnd,′Myfunc′);

  下面可直接調用DLL了:

  s:ΚTMyfunc(bptr)(60);{根據函數填相應的變量參數}

  調用完以後,用FreeLibrary釋放DLL占用的內存:

  FreeLibrary(lhnd);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved