Firemonkey应用程序在调用FreeLibrary时失败

时间:2016-05-03 12:26:29

标签: delphi dll firemonkey

我有一个简单的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过程不包含任何与显示内容相关的调用,则应用程序将按预期运行。 任何提示帮助或建议,非常感谢。

编辑:包含主应用程序的完整代码。

0 个答案:

没有答案