Перейти к содержанию
Fire Monkey от А до Я
  • 0

AccessViolation при закрытии FMX приложения, использующего FMX Dll с ShowMessage()


usmanovtt

Вопрос

Здравствуйте, коллеги. Использую RAD Studio 10.3 и FMX Linux 1.65.  Столкнулся с проблемой как говорится 'на ровном месте'. Приложение и Dll написаны с использованием FMX. Оставил только минимум (убрал не только функционал но и проверки). Нажатие на кнопку может происходить по несколько раз, проблем нет. А при закрытии приложения возникает AccessViolation. Настоящие приложение и библиотека более сложные, тут для примера оставил минимум. Первоначально в библиотеке было создание формы. Пробовал передавать в библиотеку Application и Screen. Ошибка при закрытии приложения та же. В итоге создал простые exe и dll, добавил минимум... Ошибка AV при закрытии приложения. В чем дело? Тот же код в VCL работает нормально. 

Главное приложение  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

unit formGetForm;

interface
uses
  System.SysUtils, System.Types, System.Classes, Winapi.Windows,
  FMX.Forms, FMX.Controls, FMX.Controls.Presentation, FMX.Types, FMX.StdCtrls;

type
  P_Get = procedure; safecall;
  TfrmGetForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var frmGetForm: TfrmGetForm;

implementation
{$R *.fmx}

procedure TfrmGetForm.Button1Click(Sender: TObject);
var  hDll:HMODULE;
       F_Get:P_Get;
begin
   if(hDll=0) then
    begin
     hDll:=LoadLibrary('evTestForm.dll');
     F_Get := P_Get(GetProcAddress(hDll,'Get_F'));
     F_Get;
     FreeLibrary(hDll);
     hDll:=0;
    end;
end;

end.

Dll  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
library evTestForm;
uses
  FMX.Dialogs;

{$R *.res}
procedure Get_F;  safecall;
begin
 ShowMessage('+++');
end;

exports   Get_F;

begin
end.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Если заменю  FMX.Dialogs; на  VCL.Dialogs; приложение закрывается без AV. 

 

Изменено пользователем usmanovtt
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Добрый вечер. Спасибо за ссылку. В примере по ссылке идет речь о создании форм в Dll. Это близко к моему вопросу, т.к. у меня задача в создании объектов в Dll, которые потом будут использоваться в приложении. Сразу скажу приложение и dll пишутся в одной среде RAD Studio 10.3, используется FMX 1.6.

Проект давнишний, разработан на Delphi&Builder. Сейчас встала задача переписать под Linux. И в Vcl все работает как надо. Но при использовании FMX возникли проблемы с созданием объектов в dll. В моем приведенном примере вызывается ShowMessage. И Acceess Violation возникает при закрытии приложения. Если не делать FreeLibrary, AV не возникает.  Не хочется думать что FMX настолько сырая..... Что скажете коллеги?

Ссылка на комментарий
  • 0

Доброго дня. Поковырялся я с примером... И обнаружил  что с процедурой в таком виде:

procedure CreateFMXForm; external '..\..\..\FMX\Win32\Debug\FMXDLL.dll';

нет ошибки. Но когда заворачиваешь в LoadLibrary, GetProcAddress и  FreeLibrary, Access Violation  при закрытии приложения тут как тут.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...