如题,咨询,在mdi结构下,想从dll来调入子窗体的操作步骤:看了书上的例子,不是很理解,求教这里的高手:
某书的设计步骤如下:
一.生成dll库
1.利用dll模板,
2.加入单元
3.在单元的interface部分声明输出函数
4.在单元的implimentation部分中实现输出函数的编码
5.修改dll文件的exports部分中声明输出函数
6.修改dll文件:添加一个初始化程序:
proceduer dllunloadproc(reason:integer):register;
begin
if reason=DLL_PROCESS_DETACH then application:=dllapplication;
end;
就是这里编译不过去,系统认为没有定义dllapplication变量然后在dll项目文件的初始化部分添加如下代码
begin
dllapplicaiton:=application;
dllproc:=@dllunloadproc;
end;
希望能指出问题所在,谢谢

解决方案 »

  1.   

    呵呵,大多数的书上的例子只列出关键部分的代码,其它部分要自己心领神会。
    看看
    windows.pasconst
      DLL_PROCESS_ATTACH = 1;
      {$EXTERNALSYM DLL_PROCESS_ATTACH}
      DLL_THREAD_ATTACH = 2;
      {$EXTERNALSYM DLL_THREAD_ATTACH}
      DLL_THREAD_DETACH = 3;
      {$EXTERNALSYM DLL_THREAD_DETACH}
      DLL_PROCESS_DETACH = 0;
      {$EXTERNALSYM DLL_PROCESS_DETACH}library Project1;
    uses
      SysUtils,
      Classes,
      windows,
      forms;var
      dllapplication: Tapplication;  //不是没定义么?从这里定义。
      
    {$R *.res}proceduer dllunloadproc(reason:integer):register;
    begin
    if reason=DLL_PROCESS_DETACH then  //如果该dll的调用为0 
      application:=dllapplication;   //将 dll的application 归还
    end;begin
    dllapplication:=application;  //初始化将 dll的application 保存到dllapplication
    dllproc:=@dllunloadproc;
    end.为什么要转移dll的application 呢?因为dll不能自己创建进程,只能绑定调用自己的.exe(宿主程序) 将宿主程序的application穿给dll,你的例子里肯定还有这样的代码:
    proceduer showdllform(app: Tapplication);stdcall;
    begin
      if myform = nil then
      begin
         application := app //宿主程序的 application
         myform := Tmyform.create(application);
      end;
      myform.show;
    end;