S
suhang999
Unregistered / Unconfirmed
GUEST, unregistred user!
因为有多种报表需显示,所以我把报表放入dll中。用一张报表做例子程序行如下:
dll中:
function xs(bstream :Tmemorystream;fname char):Tquickrep;stdcall;
var
cp :Tcomponent;
cds2 :Tcomponent;
ss char;
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 char):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联系起来?
dll中:
function xs(bstream :Tmemorystream;fname char):Tquickrep;stdcall;
var
cp :Tcomponent;
cds2 :Tcomponent;
ss char;
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 char):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联系起来?