在DLL动态链接库中封装VCL的MDI子窗体
2016-04-14 23:58
316 查看
在DLL动态链接库中封装VCL的MDI子窗体
不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享!
这里是工程文件的部分:
在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下:
var
DllApp: TApplication;//定义保存原DLL的TApplication对象
DllScr: TScreen;//定义保存原DLL的TScreen对象
procedure UnProcDll(Reason: Integer); register;
//重新定义DLL入口函数
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DllApp;
Screen := DllScr;
end;
end;
//初始化区
begin
DllApp := Application;//备份原DLL的TApplication对象
DllScr := Screen;//备份原DLL的TScreen对象
DllProc := @UnProcDll;//将重写后的入口函数地址付给DLLProc
end.
这里是需要导出的函数,写在工程文件或者一个单元的接口部分:
function ShowForm(App: TApplication; Scr: TScreen; Owner: TForm):TForm; export; stdcall;
begin
//下面的这两个变量是必须的
Application := App;//这个就是调用的时候对Application对象重新赋值
Screen := Scr;//对Screen对象赋值
//函数自定义代码
if not Assigned(Form1) then
begin
//Application.CreateForm(TForm1, Form1);
Form1 := TForm1.Create(Owner);
Result := Form1;
end
else
Result := Form1;
//函数自定义代码结束
end;
最后在工程文件把这个函数导出来就OK了。
//最后导出这个函数
exports
ShowForm;
http://www.cnblogs.com/lenic/archive/2009/03/29/1424267.html
不多说了,看代码就应该明白了,曾经我遇到的问题,现在放出来大家共享!
这里是工程文件的部分:
在DLL中封装MDI子窗体需要重写DLL入口函数,具体代码如下:
var
DllApp: TApplication;//定义保存原DLL的TApplication对象
DllScr: TScreen;//定义保存原DLL的TScreen对象
procedure UnProcDll(Reason: Integer); register;
//重新定义DLL入口函数
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DllApp;
Screen := DllScr;
end;
end;
//初始化区
begin
DllApp := Application;//备份原DLL的TApplication对象
DllScr := Screen;//备份原DLL的TScreen对象
DllProc := @UnProcDll;//将重写后的入口函数地址付给DLLProc
end.
这里是需要导出的函数,写在工程文件或者一个单元的接口部分:
function ShowForm(App: TApplication; Scr: TScreen; Owner: TForm):TForm; export; stdcall;
begin
//下面的这两个变量是必须的
Application := App;//这个就是调用的时候对Application对象重新赋值
Screen := Scr;//对Screen对象赋值
//函数自定义代码
if not Assigned(Form1) then
begin
//Application.CreateForm(TForm1, Form1);
Form1 := TForm1.Create(Owner);
Result := Form1;
end
else
Result := Form1;
//函数自定义代码结束
end;
最后在工程文件把这个函数导出来就OK了。
//最后导出这个函数
exports
ShowForm;
http://www.cnblogs.com/lenic/archive/2009/03/29/1424267.html
相关文章推荐
- 数据可视化开源系统(python开发)
- 20145129实验报告(二)
- springmvc基础流程
- 敏捷开发(转)
- 设计模式——单例模式(Singleton)
- 分页
- <java API源码初体验>2---collection集合之LinkedList原理分析
- 如何用git上传,管理你的文件
- C++ 解析Json——jsoncpp
- Leetcode #43. Multiply Strings 字符串相乘 解题报告
- 在DLL中封装的VCL窗体Tab键响应的问题
- 2016年4月14日
- 0414 结对 2.0 33 34
- [置顶] Android Studio或者Eclipse中的最常用的快捷键,最简单的,部分不适用eclipse
- myBatis动态语句详解
- 当React遇到了es6,让gulp来搭桥
- 【POJ 2559】Largest Rectangle in a Histogram
- TCP之深入浅出send和recv
- 【转载】Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Could not find Developer Disk Image 9.3