我有一个简单的Firemonkey应用程序,它加载一个DLL,调用该DLL中的一个过程,该过程只调用ShowMessage('来自DLL的对话......');并返回 一切都好,但调用应用程序失败,当FreeLibrary被调用并尝试关闭主应用程序时?
如果我省略了FreeLibrary调用,应用程序将立即关闭。
之前有人见过这个,为什么?
我正在使用Delphi 10.1 Berlin,但Delphi 10 Seattle也在Windows 7上失败。
申请代码:
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
uses
Winapi.Windows;
type
TTest = procedure (); stdcall;
procedure TForm2.Button1Click(Sender: TObject);
var
LibHandle: NativeUInt;
Test: TTest;
begin
LibHandle:= LoadLibrary('.\TESTDLL.DLL');
if LibHandle > 32 then try
@Test:= GetProcAddress(LibHandle, 'Test');
if @Test <> nil then
Test;
finally
FreeLibrary(LibHandle);
end;
end;
和DLL代码:
library TESTDLL;
uses
System.SysUtils,
System.Classes,
FMX.Dialogs
;
{$R *.res}
procedure Test; stdcall;
begin
ShowMessage('Dialog from DLL ...');
end;
exports
Test name 'Test';
begin
end.
如果dll过程不包含任何与显示内容相关的调用,则应用程序将按预期运行。 任何提示帮助或建议,非常感谢。
编辑:包含主应用程序的完整代码。