社区
数据库相关
帖子详情
DLL问题,高分送上!!(在线等回答)
e800
2003-10-18 09:12:08
请问,怎么样在DLL中放入一些窗体???
希望能看到一些例子!!!
...全文
51
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注入,异步调用过程,向目标线程插入待执行任务从而完成注入。窗口消息注入,指定窗口进程注入,与全局钩子注入类似。环境块注入,获取进程上下文信息,直接性修改程序执行流程完成注入。进程入口点注入,在程序初始化的时机前将
dll
模块文件注入至目标主线程。进程调试级注入,涉及调试器相关功能调用知识点
dll
模块重定位内存注入,模拟操作系统加载PE文件方式,直接将
dll
文件内存数据写入目标进程并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级
Dll
模块注入技术,内核驱动入门扩展。
计算机丢失oleaut32
dll
,无法启动文件OLEAUT32.
DLL
无法启动文件OLEAUT32.
DLL
启动所有的文件都出现这样的提示 是个老电脑,98系统愿意出
高分
悬赏哦 !更新时间:2019-10-23 09:39最满意答案这种情况多数是IE的动态链接库文件oleaut32.
dll
损坏所造成的,重新注册这个文件即可。点击“开始→运行”,输入“regsvr32 oleaut32.
dll
”后回车,重新注册该文件,出现一个对话框,点“确定”。如果还不行,重启一下电脑...
HTML(3):IE浏览器编程
Q求救!!! 取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在英文日文98下时,ie中的中文字符从剪贴板中取后在edit框中显示为乱码,edit框已设了MS Song体,能正确显示gb2312编码的汉字,估计ie中的中文为unic
HTML编程3
Q求救!!! 取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在英文日文98下时,ie中的中文字符从剪贴板中取后在edit框中显示为乱码,edit框已设了MS Song体,能正确显示g
HTML(3):IE浏览器编程 - vcmute的专栏 - CSDNBlog
导读: Q求救!!! 取ie浏览器文字乱码
问题
,
高分
相赠!!! T我所写的一个程序中有这样一个功能:用户选取了ie浏览器中的一段文字copy到剪贴板,我的程序从剪贴板中取出文字并显示在edit框中,这在中文系统下没有任何
问题
,而当程序运行在英文日文98下时,ie中的中文字符从剪贴板中取后在edit框中显示为乱码,edit框已设了MS Song体,能正确显示gb231
数据库相关
2,497
社区成员
88,445
社区内容
发帖
与我相关
我的任务
数据库相关
Delphi 数据库相关
复制链接
扫一扫
分享
社区描述
Delphi 数据库相关
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章