请问mdi结构下,从外部dll调入子窗体的步骤?

wlm721 2004-11-19 09:23:20
如题,咨询,在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;
希望能指出问题所在,谢谢
...全文
80 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
AdoreTour 2004-11-19
  • 打赏
  • 举报
回复
学习中,帮忙顶!
loveWife 2004-11-19
  • 打赏
  • 举报
回复
呵呵,大多数的书上的例子只列出关键部分的代码,其它部分要自己心领神会。
看看
windows.pas

const
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;


828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧