EXE + DLL方式取MDI里TForm名称不管用? ( 积分: 100 )

  • 主题发起人 主题发起人 bbscom
  • 开始时间 开始时间
B

bbscom

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这段代码,在独立的EXE项目里运行正常。但在EXE加DLL方式就不管用了,应该怎么做?
var
i: Integer;
begin
for i := 0 to Application.MainForm.MDIChildCount - 1 do
if Application.MainForm.MDIChildren is TForm then
ShowMessage(TForm(Application.MainForm.MDIChildren).Name);
end;
 
BPL怎么使用请发个实例好吗?
邮箱:Delphi2005@163.com
 
http://www.delphifans.com/SoftView/SoftView_1061.html
 
如果你想花最少的钱学习流行的计算机技术,本人低价提供
计算机专业高清晰 视 频 教 程,所有教程由业内名家讲解,物超所值,
所有光盘4元/张,特快专递全国三天内到货.
联系方式:手 机:1 3 5 76145612(手机联系佳) Q Q:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、java语言深入详解视频教程(12CD)
11、java技术从入门到精通视频教程(21CD)
12、javascript全接触视频教程(13CD)
13、各类网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、VC++6.0(MFC)开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、操作系统视频教程(3CD)
24、网络技术基础视频教程(2CD)
25、数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
请版主查封jjg000的ID

我的问题请大家解决!!!
 
用 Screen.FormCount , Screen.Forms 进行查找
 
http://www.2ccc.com/
找例子,有源代码。
关键字:MDI DLL
 
这个方法Screen.FormCount , Screen.Forms 进行测试过,还是找不到。
 
exe和dll的rtti信息是各自独立的。它们在不同的内存管理器下运行。
您可能需要内存共享技术。
1。在主程序和dll的dpr文件第一位置都需引用Sharemem单元,发布程序时带上borlndmm.dll(在delphi安装目录的Bin文件下)
2。使用bpl方式(同样发行程序时需带上几个bpl文件)
3。第三方内存共享技术(有些使用内存桥技术,可免去携带多余文件的问题)
 
这个问题很常见,由于RTTI两边都是独立的,而且Screen对象实际上在dll和exe中各有一份,所以两者也是独立的。完美的解决方案在这里
http://blog.sina.com.cn/u/5591c079010008rx
原帖英文,比较容易懂,俺就没翻译。楼主看看吧。
 
我现在有一个程序是exe+dll 但不是 mdi ,是 非模态窗体
用着很好用呀,等做完了我会发到这的
 
把Exe中的Application,Screen创给DLL替换DLL中的原来的(保留DLL中的备份),在DLL卸载时恢复就可以了
 
正如 lake_cx 所说,楼主可能没有把主程序的 Application,Screen 传入给 DLL 文件,所以找不到,传入正确,应该是正常的。。

DLL部份

function InvokeExCommodityForm(App : TApplication; Scr : TScreen;
var dbConnect : TSQLConnection) : TForm; StdCall;
begin
Application := App;
Screen := Scr;
InitDataModule; // 数据模块初始化
DM.SQL_ExC.SQLConnection := dbConnect;
if not Assigned(frmExCommodity) then begin
Application.CreateForm(TfrmExCommodity, frmExCommodity);
end;
frmExCommodity.Show;
Result := frmExCommodity;
end;


begin
DllApp := Application;
DllScr := Screen;
DllProc := @ExitDll;
end.
 
聯繫我的QQ:138268
我幫你解決問題,但你的分都給我吧。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
512
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部