• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        DLL文件在Delphi的創建及調用

        DLL文件在Delphi的創建及調用

        更新時間:2022-05-05 文章作者:未知 信息來源:網絡 閱讀次數:

            現時系統的開發,多數都在幾人以上的組合,工合作方式開發,這樣也方便系統的快速開發目的。
        而DLL的方法最為方便。我現整理了我的一些這方面資料,希望能幫助一些有需要的同行。


        一.函數過程的寫法:

        library FIRSTDLL;

        uses
          SysUtils,
          Classes;

        {$R *.RES}
        // 1.定義函數具體過程和輸出接口方式
        // --------------------------------
        // 函數 1
        // 功能:事數據3倍放大函數
        // --------------------------------
        function PenniesToSoins(SourceResult:Integer):Integer;stdCall;
        begin
          if SourceResult>0 then
            Result:=SourceResult*3 //結果存放于Result
          else
            Result:=SourceResult;
        end;

        exports
          PenniesToSoins; //2.函數輸出口定義
          
        end.

        ==
        ==

        二.在DLL中創建Form
        =======================
        1.一步,創建DLL工程,及加入設置好的Form

        library MGRPERSN;
        uses
          SysUtils,
          Classes,
          MGRPERFM in 'MGRPERFM.pas' {FormPERSON};//1.Form的代碼(與一般的Form一樣)

        {$R *.RES}
        exports
           ShowPerSN;//2.函數輸出口定義
        begin
        end.

        2. 在DLL設定的Form的設置
        ===========================================
        unit MGRPERFM;

        interface

        uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
          ComCtrls, ToolWin, ImgList;

        type
          TFormPERSON = class(TForm)
          private
            { Private declarations }
          public
            { Public declarations }
          end;

        //些處的變量不再用,給其改個地方,如下(改變之一)
        //var
        //  FormPERSON: TFormPERSON;

        { Declare the export function 宣布Form函數出口}//改變之二
        function ShowPerSN(AHandle: THandle; ACaption: String):BOOL; StdCall;

        implementation

        {$R *.DFM}
        //函數據過程定義
        function ShowPerSN(AHandle: THandle; ACaption: String):BOOL;
        var
          FormPERSON: TFormPERSON; //定義窗體類(上面的放到了此處)
        begin
          // Copy application handle to DLL's TApplication object
          //拷貝應用程式句柄給DLL的應有程式對象
          Application.Handle := AHandle;
          FormPERSON := TFormPERSON.Create(Application);//創建控件TForm
          try
            FormPERSON.Caption := ACaption;
            FormPERSON.ShowModal;//顯示此Form
            // Pass the date back in Result
            Result := False; //反回成功值
          finally
            FormPERSON.Free;
          end;
        end;

        三.DLL中函數及窗體的調用
        ==========================
        1.調用方法一
        --------------
        implementation //在此的下方寫明調用函數的DLL

        {$R *.DFM}
        //DLL內函數調用
        function PenniesToSoins(SourceResult:Integer):Integer;
             StdCall external 'FIRSTDLL.DLL';

        ........

        2.調用方法二
        ==============
        type  //在此創建一個函數類
          // 1 -------------------------------
          { First, define a procedural data type, this should reflect the
            procedure that is exported from the DLL. }
          { Create a new exception class to reflect a failed DLL load }
          TShowPerSN = function (AHandle: THandle; ACaption: String): BOOL; StdCall;
          EDLLLoadError = class(Exception);//同時分創建一個出錯記錄類
          // 1 -------------------------------
          TMAINCLTR = class(TForm) //這里不變,系統自動生成

        ......

        procedure TMAINCLTR.ToolButton1Click(Sender: TObject);
        var  //按鈕的調用事件:調用過程
          LibHandle: THandle;
          ShowPerSN: TShowPerSN;
        begin
          Application.Title:='人力資源管理系統DLL文件測試程式';
          { Attempt to load the DLL 嘗試裝入DLL文件}
          LibHandle := LoadLibrary('MGRPERSN.DLL');
          try
            if LibHandle = 0 then
              raise EDLLLoadError.Create('Unable to Load DLL(無法成功裝入MGRPERSN.DLL)');
            @ShowPerSN := GetProcAddress(LibHandle, 'ShowPerSN');
            if not (@ShowPerSN = nil) then
              ShowPerSN(Application.Handle, '人事資料管理')//呼叫出窗體
            else
              RaiseLastWin32Error;
          finally
            FreeLibrary(LibHandle); // Unload the DLL.
          end;
        end;
        ============== END ==================

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 免费视频成人片在线观看| xxxxxx日本处大片免费看 | 亚洲乱码卡一卡二卡三| 国产高清不卡免费视频| 亚洲精品你懂的在线观看| 中国国语毛片免费观看视频| 男女猛烈激情xx00免费视频| 男人的天堂亚洲一区二区三区 | 国产亚洲精品国产福利在线观看 | 免费播放一区二区三区| 亚洲一区二区三区高清| 永久在线观看www免费视频| 亚洲深深色噜噜狠狠网站| 国内外成人免费视频| 免费观看四虎精品成人| 国产亚洲精品福利在线无卡一| 中文字幕成人免费高清在线| 亚洲国产综合91精品麻豆| 久久国产免费福利永久| 亚洲日本一线产区和二线产区对比| 久久久久国色AV免费观看| 亚洲国产第一站精品蜜芽| 亚洲免费福利在线视频| 亚洲国产日韩一区高清在线| 在线视频免费观看爽爽爽| 亚洲AV无码一区二区三区性色| yy6080久久亚洲精品| 久热免费在线视频| 亚洲最大成人网色香蕉| 四虎国产精品永久免费网址| 亚洲免费观看在线视频| 免费一级做a爰片久久毛片潮喷| 久久久久精品国产亚洲AV无码| 最好免费观看高清在线| 亚洲人成人网站在线观看| 两个人看的www高清免费观看| 亚洲国产成人精品久久| 亚洲精品无码久久久久AV麻豆| 99re在线精品视频免费| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲日本va中文字幕久久|