Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка доступа при использовании FMX форм в динамически загружаемых библиотеках в Delphi XE7

Delphi , Файловая система , DLL и PlugIns

Вопрос разработчика, связанный с использованием динамически загружаемых библиотек (DLL) с FMX формами в приложениях Delphi XE7, заключается в возникновении ошибки доступа (access violation) при вызове функции FreeLibrary после закрытия формы. Проблема проявляется только в случае, если DLL содержит FMX форму, в то время как использование VCL форм в DLL не вызывает ошибок.

Описание проблемы:

Разработчик столкнулся с проблемой, при которой при работе с FireMonkey приложением в Delphi XE7, которое должно вызывать процедуры из DLL с собственными формами (также созданными в Delphi XE7), после закрытия формы и попытки освобождения загруженной библиотеки возникает ошибка доступа. Это происходит из-за возможных проблем с инициализацией и финализацией GDI+.

Пример кода загрузки библиотеки:

procedure TForm2.Button1Click(Sender: TObject);
type
  TFExecute = procedure; StdCall;
var
  Execute: TFExecute;
  Ext: HMODULE;
begin
  Ext := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'dlltest.dll'));
  if Ext <> 0 then
  begin
    try
      @Execute := GetProcAddress(Ext, 'Execute');
      if Assigned(Execute) then
        Execute
      else
        ShowMessage('Function not found !');
    finally
      FreeLibrary(Ext);
    end;
  end
  else
    ShowMessage('DLL not found');
end;

Пример кода DLL:

procedure Execute; StdCall;
begin
  fMain := TfMain.Create(nil);
  fMain.ShowModal;
  fMain.Free;
end;
exports
  Execute;

Исследование и возможные решения:

Разработчик провел ряд тестов и обнаружил, что проблема возникает только с FMX формами. Были попытки решения, включая использование BPL вместо DLL и применение ShareMem/FastShareMem, но результатов это не принесло.

Подтвержденный ответ:

В ходе поиска решений было обнаружено, что в версии Delphi 10 Seattle, при использовании BPL с включенными runtime пакетами, стало возможным использование внешних форм без сбоев.

Альтернативный ответ:

Также было высказано предположение, что использование DLL в таком контексте может быть не поддержано в рамках дизайна фреймворка, или это может быть связано с ошибкой в фреймворке.

Заключение:

Использование FMX форм в динамически загружаемых библиотеках в Delphi XE7 может приводить к ошибкам доступа, особенно при работе с GDI+. В зависимости от конкретной ситуации, могут потребоваться дополнительные исследования или обновление версии Delphi до более новой, где уже могут быть исправлены подобные проблемы. Важно также учитывать, что некоторые решения, применимые в более старых версиях Delphi, могут быть не совместимы с новыми версиями из-за изменений в фреймворке.

Для разработчиков, работающих с аналогичными задачами, рекомендуется следить за обновлениями и возможными решениями на форумах и в сообществах, посвященных Delphi и Object Pascal, а также не забывать об обновлении своей среды разработки до последних версий, где могут быть устранены выявленные проблемы.

Создано по материалам из источника по ссылке.

Разработчик столкнулся с ошибкой доступа при попытке освободить динамически загруженную библиотеку, содержащую FMX форму, в приложении Delphi XE7.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: DLL и PlugIns ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 12:57:45/0.0060269832611084/1