全國計算機等級考試二級Delphi輔導講義 104

字號:

10.2.1.6 編寫一般DLLs的應用舉例
    在下面的程序中我們把一個字符串操作的函數(shù)儲存到一個DLLs中,以便需要的時候調用它。應該注意的一點是:為了保證這個函數(shù)可以被其它語言編寫的程序所調用,作為參數(shù)傳遞的字符串應該是無結束符的字符數(shù)組類型(即PChar類型),而不是Object Pascal的帶結束符的Srting類型。程序清單如下:
    library Example;
    uses
    SysUtils,
    Classes;
    {返回字符在字符串中的位置}
    function InStr(SourceStr: PChar;Ch: Char): Integer; export;
    var
    Len,i: Integer;
    begin
    Len := strlen(SourceStr);
    for i := 0 to Len-1 do
    if SourceStr[i] = ch then
    begin
    Result := i;
    Exit;
    end;
    Result := -1;
    end;
    exports
    Instr Index 1 name 'MyInStr' resident;
    begin
    end.
    10.2.2 調用DLLs
    有兩種方法可用于調用一個儲存在DLLs中的過程。
    1.靜態(tài)調用或顯示裝載
    使用一個外部聲明子句,使DLLs在應用程序開始執(zhí)行前即被裝入。例如:
    function Instr(SourceStr : PChar;Check : Char); Integer; far; external 'UseStr';
    使用這種方法,程序無法在運行時間里決定DLLs的調用。假如一個特定的DLLs在運行時無法使用,則應用程序將無法執(zhí)行。
    2.動態(tài)調用或隱式裝載
    使用Windows API函數(shù)LoadLibray和GetProcAddress可以實現(xiàn)在運行時間里動態(tài)裝載DLLs并調用其中的過程。
    若程序只在其中的一部分調用DLLs的過程,或者程序使用哪個DLLs, 調用其中的哪個過程需要根據(jù)程序運行的實際狀態(tài)來判斷,那么使用動態(tài)調用就是一個很好的選擇。
    使用動態(tài)調用,即使裝載一個DLLs失敗了,程序仍能繼續(xù)運行。