dll中使用QuickReport出现地址错误(100分)

  • 主题发起人 主题发起人 zygtp
  • 开始时间 开始时间
Z

zygtp

Unregistered / Unconfirmed
GUEST, unregistred user!
我在dll中调用QuickReport的Preview方法,在关闭预览窗口时他的父程序出现地址错误,但在delphi下同样使用却不出错,请各位帮忙?
 
C++builder6中出现错误,动态库中直接调用报表出错,如果动态库中的窗体调用报表则
不出错。
 
有没有释放?动态库中还用了别的什么?
 
释放了,用窗体的ShowModal正常,改为QuickRep1->Preview()或QuickRep1->PreviewModal()就出错,用QuickRep1->Print()也正常,问题就在Preview()里面可能做了些特殊处理
 
那你又是如何创建的呢??
 
bool _export __stdcall Fun_RunCard(TDLLFace *iDLLFace)
{
DLLFace=iDLLFace;
try
{
rep_RunCard=new Trep_RunCard(Application);
// rep_RunCard->QuickRep1->Print();//正常
rep_RunCard->QuickRep1->Preview();////出错
delete rep_RunCard;rep_RunCard=NULL;
return true;
}
catch(...)
{
delete rep_RunCard;rep_RunCard=NULL;
return false;
}
}
 
rep_RunCard=new Trep_RunCard(Application);
//换成rep_RunCard=new Trep_RunCard(nil);
这个问题在刘艺的面向对象的编程思想中有描述,强调创建时不要使用Application,如果手工进行释放时,推荐用nil,你试试看?
 
同样出错,我在delphi中使用一直没问题
将 rep_RunCard->QuickRep1->Preview();////出错
改为rep_RunCard->ShowModal();//正常
或先调用窗体,在窗体里再调用该报表也正常,
我怀疑是Exe和dll未保持一致,但我也试过将exe的application传递给dll也不行,并且发现
即使不传他们两个的地址也一样。
 
试试 看你的QuickRep 的版本是否升级。 borland 的QuickRep以前的版本内存释放不干净
我也出现过那种问题。 使用高版本的 QuickRep 就可以了
 

Similar threads

后退
顶部