把报表放入dll中,并在调用时使其在qrpreview中显示出来,为何出错?(100分)

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

suhang999

Unregistered / Unconfirmed
GUEST, unregistred user!
因为有多种报表需显示,所以我把报表放入dll中。用一张报表做例子程序行如下:
dll中:
function xs(bstream :Tmemorystream;fname :pchar):Tquickrep;stdcall;
var
cp :Tcomponent;
cds2 :Tcomponent;
ss :pchar;
begin
application.createform(tk06,k06);//k06为报表名称;
ss :=fname;
cp :=application.findcomponent(ss);
cds2 :=Tquickrep(cp).findcomponent('cds');//cds为k06上的数据集;
Tclientdataset(cds2).loadfromstream(bstream);
result :=Tquickrep(cp);
end;

主程序体调用dll:
type =funciton(bstream :Tmemorystream;fname :pchar):Tquickrep;stdcall;
var
qr :Tquickrep//全局变量;
hf :Thandle;
df :Tfarproc;
begin
hf :=loadlibrary('dll.dll');
df :=getprocaddress(hf,'xs') ;
if df<>nil
then
begin
qr :=tdf(df)(bstream,pchar('k06'));
qr.onpreview :=yx;//yx为qr在qrpreview中显示的过程;
qr.preview;
end;
freelibrary(hf);
end;

procedure yx;
begin
qrpreview1.qrprinter :=qr.qrprinter;
end;
问题1:
我在qr.preview时,程序是挂起的,在我预览的同时,再做其他操作,如退出,导出数据时,程序会出现未知错误。
问题2:
我如何把dll中导出的报表映射成本地报表?
问题3:
如果用模态预览,qr.previewmodl,就不能马上释放dll,这样qrpreview中就没有显示。
这样何时释放dll?
问题4:
我如果在dll中直接显示报表,如何把显示的结果与调用程序中的qrpreview联系起来?
 
难道没有高手帮帮我吗?
 
1:
你的对象肯定没有释放干净在uses 里加上sharememoy试试,或者你自己依次判断
if assigned(obj) then
freeandnil(obj) ;
试试吧.
2:
导出的报表是什么意思,是报表另存的qr文件吧。
 
一棍子打死,你好,我已经在uses中加入了sharemem,但问题依然,但还是谢谢。
 
我已经等待了好几天,请高手帮帮忙
 
后退
顶部