Как излечить постоянные AV при работе с DLL?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
BadBoyAlex
постоялец
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород
Контактная информация:

Как излечить постоянные AV при работе с DLL?

Сообщение BadBoyAlex »

Имеется форма, на которой лежит панель. Имеется форма в dll, которая должна в эту панель "вписаться". Если бы эта форма находилась внутри приложения, то такой код спасал бы:

Код: Выделить всё

if (ContainerPanel.ControlCount = 0) or not (ContainerPanel.Controls[0] is VFormClass) then
 begin
 if ContainerPanel.ControlCount > 0 then
  ContainerPanel.Controls[0].Free;
 if Assigned(VFormClass) then
  begin
  VForm:= VFormClass.Create(Self);
  with VForm do
   begin
    Hide;
    BorderStyle:= bsNone;
    Parent:= ContainerPanel;
    Align:= alClient;
    Show;
    end;
 end;

Пробую реализовать что-то подобное:
DLL:

Код: Выделить всё

library textviewer;
{$mode delphi}
{$codepage UTF8}
uses Interfaces, Classes, TextViewerForm, fc_standart, Forms, Controls,
     ExtCtrls;
procedure LoadForm (const AOwnerForm, AOwnerPanel: TComponent);
var Form: TTextViewerFrm;
begin
Form:= TTextViewerFrm.Create(AOwnerForm);
with Form do
 begin
 Hide;
 BorderStyle:= bsNone;
 Parent:= (AOwnerPanel as TPanel);
 Align:= alClient;
 DocumentName:= '';
 Show;
 end;
end;
exports LoadForm;
begin
end.     

вызов dll:

Код: Выделить всё

var PlgHandle: TLibHandle;
      LoadForm: procedure (const AOwnerForm, AOwnerPanel: TComponent);
<...>
PlgHandle:= SafeLoadLibrary(GetFCPath + 'PlugIns\Previewer\textviewer.dll');
@LoadForm:= GetProcAddress(PlgHandle, 'LoadForm');
LoadForm(Self, ContainerPanel);
<...>

Получаю ошибку:
Изображение

Как её исправить? Компилируются одной версией Lazarus'a.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

http://freepascal.ru/article/freepascal/20050522025034/
И передаём ещё объект Application в dll.

А вообще так делать как вы нехорошо!
Аватара пользователя
BadBoyAlex
постоялец
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород
Контактная информация:

Сообщение BadBoyAlex »

Mr.Smart писал(а): вообще так делать как вы нехорошо!


Почему?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

В основном проблемы с памятью и все проблемы вытекающие от сюда.
Аватара пользователя
BadBoyAlex
постоялец
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород
Контактная информация:

Сообщение BadBoyAlex »

Mr.Smart писал(а):И передаём ещё объект Application в dll.

AV исчезла, а форму всё равно не кажит.
Ответить