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;
beginend. 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;
在DLL内,初始化COM了吗?
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;
beginend.
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;