Frame如何封装进Dll中?(200分)

  • 主题发起人 主题发起人 shineya
  • 开始时间 开始时间
S

shineya

Unregistered / Unconfirmed
GUEST, unregistred user!
我在搞一个MIS系统,目前全部采用Frame技术,所有模块在一个exe内,目前还可以,
但随着项目的扩展,exe变的越来越大,我想用Dll来封装Frame,但在主程序中调用
Frame却成了问题(出错),Frame在Dll中的输出函数可能和Form有些不一样,谁有过
相关的经验,还望不吝赐教!小弟在此先谢过了!
 
出了什么错?写出来看看
 
Dll中的输出函数:
exports
ShowFrame;
其具体形式如下:
ShowFrame(AHandle: THandle; AOwner: TComponent; AParent: TWinControl): TFrame;
var
Frame1: TFrame1;
begin
Application.Handle := AHandle;
Frame1 := TFrame1.Create(AOwner);
Result := Frame1;
Frame1.align := alClient;
Frame1.Parent := AParent;
end;
主程序调用:ShowFrame(Application.handle, panel1, panel1);//把Dll中的Frame
//显示在Panel1上。
主程序调用之后,出现Can not assign a TFont to a TFont; 这时,在Frame1中加上
一个Panel再调用,什么也没有响应(我相信Frame已经实例化了,就是显示不出来)。
请各位兄台指教!
 
是不可能这样做DI~ [:)]
把Debug DCU编译开关打开再跟踪运行一下你就知道为什么了。
 
xianjun兄,
莫非帮我调试过?可是我跟进去之后发现似乎进入死循环,但并不知道错在哪里。cpu在
十几个单元里跑来跑去没有结果,还望xianjun兄能明示。
 
Frame1的属性给的不够充分
 
不要光说一些理论上的空话嘛,谁要是知道的话给个例子不就完了,又不是太复杂。
 
没有帮你调试过,但以前我也做过类似的工作,最后也不得不绕过它
如果没记错,你应该在 Frame1 := TFrame1.Create(AOwner); 这一句就出错了吧?

根据你提供的情况,现在再想换成DLL形式应该太晚了一点,这个要一开始就得规划好
其实EXE大一些也没所谓啊,不能只是为了这一点而把它分成DLL吧
我现在做的项目,编译出来的EXE有16M(关闭所有调试信息,打开优化开关),用ASPack
压一下,也就刚好3M,3M的EXE不能算大吧?
前一段时间我也想把它按模块来分成DLL,以便以后分模块升级。后来就觉得工作量太大了
根本不大可能完成。 不知你这个MIS系统有多大,如果不大的话,也没必要分成DLL了[:D]
太大的话,确实是一件很大工作量的活。
 
我在dll中就是这么用的,先创建一个可视Frame1(TFrame类),再如上Frame1.Crate(Aparent)
就可以了。
 
to xianjun:其实,我一直认为这个创建是对的,只是显示有问题。至于我的工程,
早就完成了,目前不过想进行一下技术总结。我的文件其实不大,只有8M左右,压
缩之后也就不到2M,但我个人认为已经很大了,我认为exe最好能控制在几百K以内。
至于压缩,本质上在运行时性能不会有任何改善和提高,相反,它是以CPU的损耗来
换取内存作为代价的,理论上,速度应该稍慢。你的EXE有16M之巨,而压缩之后才
3M,那么应该使用了很多的图象资源文件,我觉得还是把它们放到Dll中的好。
言归正传,我在DFW上搜索了很长时间,发现问这个问题的不下百人,但大多数都
不了了之。不过,似乎有人确实知道答案,却是通过MAIL来回答,我给他发去了问题,
尚无回音。
to sdzzg: 你能否把你的代码写出来。我想,一般的我都试过了,非关键问题我会来
DWF吗?
 
学习,帮你up一下
 
各位,不要光看不发言嘛!
 
Frame1 := TFrame1.Create(AOwner);
应该是这里出错了,AOwner好象应该是一个Frame。
不过,我没有时间调试,你自己试一下吧。
 
AOwner并不需要一定是一个TFrame型的呀。如果是的话,那只不过是Frame的嵌套而已。
奋力疾呼:有点奉献精神吧!!!!!
 
这么久都没人答,是不是Mission impossible
 
后退
顶部