在用PowerBuilder開發應用程序時,常常須要調用動態連接庫DLL,本文介紹了動態連接庫的基本特色,給出了VC++創建DLL以及在PowerBuilder中調用VC++建立的DLL函數的編程實例,實現了經過DLL鏈接PowerBuilder和VC++編制的不一樣程序的目的。 數據庫
1、 DLL概述: 編程
---- 動態連接庫(Dynamic-Link Library),簡稱DLL,是基於Windows程序設計的一個很是重要的組成部分。使用DLL有許多優勢:瀏覽器
(1)使用DLL的動態鏈接不是將庫代碼拷貝,只在程序中記錄函數的入口點和接口,在程序執行時纔將庫代碼裝入內存,若是有多個程序使用相同的DLL,也只需將DLL在內存中裝載一次,節省了內存開銷。框架
(2)DLL是基於Windows的程序模塊,它不只包含可執行代碼,還能夠包含數據,各類資源,擴大了庫文件的使用範圍。編程語言
(3)對於一個大型的、不斷更新的應用程序,能夠將許多重複的功能寫成DLL,用主程序調用,這樣既減小了開發的工做量,又提升了訪問速度。ide
(4)DLL豐富了PowerScript語言的編程能力,可使用PowerScript函數集以外的函數。例如:用戶可能編寫圖象處理系統來瀏覽文件並將其存放於數據庫,該應用需使用瀏覽器,但用PowerScript語言未提供作這類工做的函數,爲了操縱設備,須要與設備自己環境通訊,該環境通常是廠商提供的動態連接庫。函數
(5)DLL獨立於編程語言,大多數WINDOWS編程環境都容許主程序調用DLL中的函數。便可以用VC++、VB、PowerBuilder、Delphi、彙編語言等創建DLL,而後在不一樣語言編制的應用程序中調用它。 ui
下面用一個實例說明經過DLL實現PowerBuilder程序和VC++程序之間的鏈接。spa
2、 VC++建立DLL 操作系統
---- 在VC++5.0中能夠用MFC AppWizard自動生成Win32 DLL和MFC AppWizard DLL,啓動VC以後,從File | New菜單項,選擇New對話框中的Projects標籤,選擇新項目爲MFC AppWizard(dll),輸入工程名pbdll,點擊OK按鈕,彈出圖1-1所示對話框,選擇DLL類型爲:Regular DLL using shared MFC DLL,而後點擊Finish按鈕。這樣,AppWizard將自動建立一個包含基本要素的DLL框架,接着手工添加代碼。
圖1-1 (略)自動生成的MFC AppWizard DLL
打開pbdll.cpp文件,添加以下函數:
extern "C " _declspec ( dllexport )
int PASCAL out_num(int x)
{
int y;
char msg[30];
y=x > > 2;
sprintf(msg, "計算結果:%o ! ", y);
::MessageBox(NULL, msg, "信息 ", MB_OK);
return 0;
}
以上聲明瞭函數out_num(),輸入參數爲一個整型數,
做移位運算後,用對話框將計算結果顯示出來。
接着打開pbdll.def文件,在EXPORTS下輸入函數說明
out_num,文件內容以下:
LIBRARY "pbdll "
DESCRIPTION 'pbdll Windows Dynamic Link Library '
EXPORTS
; Explicit exports can go here
out_num @1
最後編譯生成動態連接庫pbdll.dll。
3、 在PowerBuilder中調用VC++建立的DLL函數
---- 爲了在PowerBuilder應用程序中調用存放在動態連接庫pbdll.dll中的函數out_num(),須要事先聲明。在聲明時要明確:
(1)函數的做用範圍是全局的仍是局部的。全局聲明可以使該函數用於整個應用,局部聲明僅使該函數在對象的腳本中有效。
(2)必須指明函數返回的數據類型、傳遞參數的個數和類型,並將存放該函數的動態連接庫的名字告訴PowerBuilder。
---- 聲明完成後,應用程序能夠調用函數out_num() ,調用該函數的代碼與調用任何標準的PowerScript函數同樣,區別在於:該函數存放在動態連接庫中,調用它時,動態連接庫裝入內存,函數執行。
---- 下面是PowerBuilder中被調用函數的使用聲明:
Function int out_num ( int irow ) LIBRARY "pbdll.dll "
在PowerBuilder中調用函數out_num()代碼以下:
int irow,retcode
irow=dw_1.rowcount()
retcode=out_num(irow)
4、 加載DLL
---- 當PowerBuilder應用程序調用外部函數時,動態連接庫裝入內存。操做系統會在以下位置查找動態連接庫:
(1)EXE文件運行的目錄。
(2)Windows的系統目錄。
若是沒有找到DLL,應用程序將產生運行錯誤,顯示一個對話框,若是找到DLL,它就被映射到程序的內存空間