フォームを開いてレポートを印刷するプロシージャを dll に作成しました。この手順は、exe から完全に機能します。このプロシージャとフォームを含むユニットを dll にラップし、プロシージャを次のようにエクスポートしました。
{$R *.res}
Procedure PrintTopSellers; stdcall;
begin
Form1 := TForm1.create(nil);
GetMonth := TGetMonth.create(nil);
Form1.PrintTopSellers;
end;
exports PrintTopSellers;
begin
end.
ここで、次のように exe からこのプロシージャ PrintTopSellers を呼び出します。
procedure TForm1.Button5Click(Sender: TObject);
type
TRead_iButton = function :integer;
var
DLL_Handle: THandle;
Read_iButton: TRead_iButton;
Begin
DLL_Handle := LoadLibrary('c:\Catalog.dll');
if DLL_Handle <> 0 then
begin
@Read_iButton:= GetProcAddress(DLL_Handle, 'PrintTopSellers');
Read_iButton;
end;
application.ProcessMessages;
FreeLibrary(DLL_Handle);
end;
プロシージャの呼び出しは完全に機能します。しかし、呼び出し元の exe を閉じると、アクセス違反が発生します - 「アドレス 00BAC89C でアクセス違反。アドレス 00BAC89C の読み取り」。
任意の支援に感謝します。Delphi 7を使用しています。ありがとう