窗体上有一个保存控件.是用于把数据导入Excel表中.编译成可执行文件,保存时正常.但是做成dll.保存时报地址错.其它的控件都正常.是什么原因?
library AllQuy; uses
ShareMem, Forms, SysUtils, Classes,
AllQuery in 'AllQuery.pas' {AllForm}; procedure ShowAllQuery();stdcall;
var f:TAllForm;
begin
f:=TAllForm.Create(nil);
try
f.ShowModal;
finally
f.Free;
end;
end; {$R *.res} exports
ShowAllQuery;
begin end.
unit单元文件:
.......
procedure TAllForm.BitBtn5Click(Sender: TObject);
var
ExpClass : TDBGridEhExportClass;
Ext, s :String;
begin
s := Label1.Caption;
SaveDialog1.FileName := s + '.xls'; if SaveDialog1.Execute then
begin
DBGrid.Selection.SelectAll;
AllForm.ActiveControl := DBGrid;
case SaveDialog1.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then
SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
SaveDBGridEhToExportFile(ExpClass,DBG,SaveDialog1.FileName, true);
end;
end;
end;
........... 以上为dll.下面是调用dll的部分代码 procedure TmainForm.Botton1(Sender: TObject);
type
mypointer = procedure();stdcall;
var
Handle : THandle;
frm_p : mypointer;
begin
Handle := loadlibrary('AllQuy.dll');
if Handle > 32 then
begin
frm_p := GetProcAddress(Handle, 'ShowAllQuery');
if @frm_p <> nil then
frm_p;
end;
Freelibrary(Handle);
end;
library AllQuy; uses
ShareMem, Forms, SysUtils, Classes,
AllQuery in 'AllQuery.pas' {AllForm}; procedure ShowAllQuery();stdcall;
var f:TAllForm;
begin
f:=TAllForm.Create(nil);
try
f.ShowModal;
finally
f.Free;
end;
end; {$R *.res} exports
ShowAllQuery;
begin end.
unit单元文件:
.......
procedure TAllForm.BitBtn5Click(Sender: TObject);
var
ExpClass : TDBGridEhExportClass;
Ext, s :String;
begin
s := Label1.Caption;
SaveDialog1.FileName := s + '.xls'; if SaveDialog1.Execute then
begin
DBGrid.Selection.SelectAll;
AllForm.ActiveControl := DBGrid;
case SaveDialog1.FilterIndex of
1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
3: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
else
ExpClass := nil; Ext := '';
end;
if ExpClass <> nil then
begin
if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then
SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
SaveDBGridEhToExportFile(ExpClass,DBG,SaveDialog1.FileName, true);
end;
end;
end;
........... 以上为dll.下面是调用dll的部分代码 procedure TmainForm.Botton1(Sender: TObject);
type
mypointer = procedure();stdcall;
var
Handle : THandle;
frm_p : mypointer;
begin
Handle := loadlibrary('AllQuy.dll');
if Handle > 32 then
begin
frm_p := GetProcAddress(Handle, 'ShowAllQuery');
if @frm_p <> nil then
frm_p;
end;
Freelibrary(Handle);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货