PB調用與封裝動態庫

在用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,它就被映射到程序的內存空間

相關文章
相關標籤/搜索