[PB+Delphi]主应用程序用的是PB,操作界面调用Delphi开发的DLL

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 juwuyi 的 blog

需求:由于最近接到这样的项目,甲方他们要求我们开发的功能加入他们原先已经存在的一个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的文件夹下就可以运行了。

--------------2005年1月9日13:24:02 joecom(juwuyi)

本文关键:[PB+Delphi]主应用程序用的是PB,操作界面调用Delphi开发的DLL
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top