社区
数据库相关
帖子详情
DLL问题,高分送上!!(在线等回答)
e800
2003-10-18 09:12:08
请问,怎么样在DLL中放入一些窗体???
希望能看到一些例子!!!
...全文
50
8
打赏
收藏
DLL问题,高分送上!!(在线等回答)
请问,怎么样在DLL中放入一些窗体??? 希望能看到一些例子!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
星之瀚海
2003-10-20
打赏
举报
回复
窗体是可以重复创建的
星之瀚海
2003-10-20
打赏
举报
回复
如果我有一个类,在DLL中实现的,如何在外部不定义其声明,就可直接引用?
星之瀚海
2003-10-20
打赏
举报
回复
怎么样强制引用?我必须声明单元吗
ltmb118
2003-10-20
打赏
举报
回复
注意窗体不要重复创建
pankun
2003-10-19
打赏
举报
回复
转:
DLL中导出窗体指南
作为一个经常被提起的问题,很多人不知道怎么来从DLL中导出窗体,特别是MDI的子窗体,因此Kingron愿意在这里把一些经验写出来给大家分享,让大家在碰到类似的问题的时候,少走些弯路。
大家知道,DLL有两种加载方式,至于动态的,和静态的,稍微有点儿区别。动态的加载,大家可以参考Torry's Delphi Page上面的例子,其中有一个MDI的例子,非常简单的,很好用。我的例子以静态加载为主。
据目前来看,我们要在DLL中导出这个Form的话,必须通过DLL导出函数来做到,但是我们知道DLL工程的Application和Host程序的Application是有区别的,对于一般的应用程序来说,Application是VCL固定的,一般不会修改Application对象指针,但是在DLL中,我们需要使用窗体等,或者使用Application对象的时候,使DLL的Application和Host程序一样,这样才不至于混淆。以下面的例子为例,如果不修改Application对象,那么Host程序退出的时候,可能出现AV错误!例如:
在Host中Export一个函数:
function DllFunction(App:TApplication;PForm:TForm):TForm2;stdcall;
begin
Result :=TForm2.Create(PForm);
end;
那么主程序推出的时候,很可能发生AV错误。
下面一步一步来做:
首先,我们需要一个DLL工程,在IDE中New一个DLL,然后New一个Form,Save All File,工程名为DLL.DPR,Form的Unit文件为DLLForm.pas,窗体类名为FrmDLLChild。然后随便设计这个DLLChild Form即可。
然后,在DLL.DPR中修改代码,添加:
library Dll;
uses
SysUtils,windows,
Classes,Controls,Forms,
DllForm in 'DllForm.pas' ;
{$R *.res}
var
DllApp:TApplication;
{ 用于初始化:保存DLL本身的Application,然后设置DLL的Application指向Host的Application }
procedure InitDLL(App:TApplication);stdcall;
begin
DllApp:=Application;
Application:=App;
end;
{ 善后工作:恢复DLL原来的Application }
procedure FreeDLL;stdcall;
begin
Application:=DllApp;
end;
{ 返回一个窗体对象,这是DLL的主要功能 }
function GetDllChildForm(Parent:TComponent):TFrmDLLChild;stdcall;
begin
Result := TFrmDLLChild.Create(Parent);
end;
exports
InitDLL,FreeDLL,GetDllChildForm;
begin
end.
至此DLL已经完成了,在使用DLL的时候,需要注意:首先必须调用InitDLL,并且传递主程序的Application作为参数,否则主程序退出的时候,会报AV错误。
主程序调用如下:
为了简单方便地使用,可以把DLL中包含窗体的那个单元Use进来,如果不喜欢,用类型强制也可。
function GetDllChildForm(Parent:TComponent):TFrmDllChild;stdcall;external 'dll.dll';
procedure InitDLL(App:TApplication);stdcall;external 'dll.dll';
procedure FreeDLL;stdcall;external 'dll.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
InitDLL(Application);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeDLL;
end;
调用窗体代码:
var
DForm:TFrmDllChild;
begin
DForm :=DllFunction(Application,Self);
DForm.Show;
end;
e800
2003-10-18
打赏
举报
回复
直接在Application加进去,这样加进去,好像不能编译哦!!
各位可否给个例子小弟我看看??
hthunter
2003-10-18
打赏
举报
回复
就象普通的Application一样加如窗体就可以了的
blueshu
2003-10-18
打赏
举报
回复
demo中就有
Windows进程常用
DLL
模块注入技术
课程结合多种Windows进程常用
DLL
注入技术。 远程线程注入 APC注入,异步调用过程,向目标线程插入待执行任务从而完成注入。 窗口消息注入,指定窗口进程注入,与全局钩子注入类似。 环境块注入,获取进程上下文信息...
计算机丢失oleaut32
dll
,无法启动文件OLEAUT32.
DLL
无法启动文件OLEAUT32.
DLL
启动所有的文件都出现这样的提示 是个老电脑,98系统愿意出
高分
悬赏哦 !更新时间:2019-10-23 09:39最满意答案这种情况多数是IE的动态链接库文件oleaut32.
dll
损坏所造成的,重新注册这个...
HTML(3):IE浏览器编程
取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在...
HTML编程3
取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在...
HTML(3):IE浏览器编程 - vcmute的专栏 - CSDNBlog
取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在...
数据库相关
2,497
社区成员
88,445
社区内容
发帖
与我相关
我的任务
数据库相关
Delphi 数据库相关
复制链接
扫一扫
分享
社区描述
Delphi 数据库相关
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章