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

usmanovtt

Пользователи
  • Постов

    3
  • Зарегистрирован

  • Посещение

  1. Доброго дня. Поковырялся я с примером... И обнаружил что с процедурой в таком виде: procedure CreateFMXForm; external '..\..\..\FMX\Win32\Debug\FMXDLL.dll'; нет ошибки. Но когда заворачиваешь в LoadLibrary, GetProcAddress и FreeLibrary, Access Violation при закрытии приложения тут как тут.
  2. Добрый вечер. Спасибо за ссылку. В примере по ссылке идет речь о создании форм в Dll. Это близко к моему вопросу, т.к. у меня задача в создании объектов в Dll, которые потом будут использоваться в приложении. Сразу скажу приложение и dll пишутся в одной среде RAD Studio 10.3, используется FMX 1.6. Проект давнишний, разработан на Delphi&Builder. Сейчас встала задача переписать под Linux. И в Vcl все работает как надо. Но при использовании FMX возникли проблемы с созданием объектов в dll. В моем приведенном примере вызывается ShowMessage. И Acceess Violation возникает при закрытии приложения. Если не делать FreeLibrary, AV не возникает. Не хочется думать что FMX настолько сырая..... Что скажете коллеги?
  3. Здравствуйте, коллеги. Использую 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.
×
×
  • Создать...