DLL开发时遇到找不到parent的问题 50分(50分)

  • 主题发起人 主题发起人 nlight_yl
  • 开始时间 开始时间
N

nlight_yl

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi写dll文件(封装窗体资源)
因为使用bpl,要传参数的时候要在主程序封装bpl的接口文件文件 无法实现主程序的不重编译

因为有些控件需要父句柄导致程序异常
在borland delphi 中的forms文件里有这样一个函数
function GetParentForm(Control: TControl): TCustomForm;
begin
while Control.Parent <> nil do Control := Control.Parent;
if Control is TCustomForm then
Result := TCustomForm(Control) else
Result := nil;
end;
函数会追溯到主程序的框架 判断最后的对象是否为TCustomForm 如果在主函数中调用该函数可以得到正确的结果
在dll里进行追溯的时候会发现 主程序的框架变成了
TwinControl类型 不符合上面的要求结果报出异常 不知道这个问题大家有没有遇到过 有什么解决的办法没有 谢谢了!

对了GetParentForm这个函数原先的比较条件是:
if Control is TCustomForm then
如果将范围扩大到TControl 则可以通过 但是这样要修改FORMS文件 而且释放资源的时候会出现内存操作异常
 
你个function本身就有问题,里面用的while不知所言。。。
给改一下:
function GetParentForm(Control: TControl): TCustomForm;
begin
if Control.Parent is TCustomForm then
Result := TCustomForm(Control)
 else
Result := nil;
end;
 
这个FUNCTION不是我的哦 是DELPHI本身的 在 FORMS文件里的哦 我的异常就出现在这个FUNCTION里
 
怎么没有帮我啊?不是分给得少了吧 我才第一次来哦!!!各位帮帮忙啊!
就是换一种方案也行 我主要是想实现 主框架和模块分开 这样主框架就可以实现最少的变动,增加模块也不会影响主框架,但是主框架能传递参数到模块中,模块包含了资源文件。有什么方案可以实现?
 
后退
顶部