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

[PB+Delphi]主應用程序用的是PB,操作界面調用Delphi開發的DLL

編輯:Delphi

  需求:由於最近接到這樣的項目,甲方他們要求我們開發的功能加入他們原先已經存在的一個PB開發的應用程序中。唯一的目的是不想有兩個exe應用程序。
  方案:把Delphi的應用程序用dll的形式打包,然後在PB裡調用。
  設計
          一、 PB部分
                   1、新建一個非可視化的類n_cst_demo,我們把同一模塊的調用都放到 這個類裡。  
                   2、定義API調用。在Declare---Local External Functions裡定義
                         //handle : 是當前窗口的句柄  ; param : 其他需要的參數 
                         SUBROUTINE  show_demo(uLong handle , String param) LIBRARY "Project1.dll"
                   3、新建一個窗體w_main。
                   4、新建一個菜單m_dll。
                   5、建一個菜單項就叫測試dll。Clicked事件裡寫上:
  

  

n_cst_demo n_pda

  n_pda = Create n_cst_demo

  n_pda.Show_Demo( Handle(ParentWindow) ,"ABCD1234")

  Destroy n_pda

            這樣我們的PB部分就算完成了。
     

     二、Delphi部分
           1、新建一個dll Project,    

      2、新建一個Form1。保存。
        3、在project裡寫上代碼:
  

  library Project1;

  uses
    SysUtils,
    Forms,
    Windows,
    Classes,
    Controls,
    Dialogs,
    Unit1 in 'Unit1.pas' {Form1},
    DM in 'DM.pas' {DataModule1: TDataModule};
  

  {$R *.RES}

  
  procedure DLLMain(Reason: integer);
  begin
    case Reason of
      DLL_PROCESS_ATTACH:
      begin
         Application.CreateForm(TDataModule1, DataModule1);
      end;
      DLL_PROCESS_DETACH:
      begin

      end;
      DLL_THREAD_ATTACH: begin end;
      DLL_THREAD_DETACH: begin end;
    end
  end;

  //記住,在Delphi裡字符串參數需要用PChar類型定義
  
procedure show_demo(handle : THandle;const param : pchar); stdcall;
  var
     oldHandle : THandle;
  begin
   //保存dll的句柄
  
 oldHandle := Application.Handle ;
   //把DLL的應用的句柄改為PB裡的窗口的句柄
   //目的是為了達到DLL和PB的可執行文件是屬於一個應用程序
   //效果:打開DLL裡的窗口後,在任務欄裡不會多出現一個圖標

   Application.Handle := handle ;
   Application.CreateForm(TForm1, Form1);
   try
        Form1.s_param := StrPas( param );
        Form1.ShowModal;
   finally
        Form1.Free;
        Application.Handle := oldHandle ;
   end;
  end;

  exports
    show_demo;

  begin
    DllProc := @DLLMain;
    DllMain(DLL_PROCESS_ATTACH)
  end.

       4、編譯後,將project1.dll放到pb的文件夾下就可以運行了。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved