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

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

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

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

Сообщение BadBoyAlex » 25.01.2013 11:40:55

Имеется форма, на которой лежит панель. Имеется форма в 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.
Аватара пользователя
BadBoyAlex
постоялец
 
Сообщения: 119
Зарегистрирован: 08.06.2010 12:42:23
Откуда: Россия, Белгород

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

Сообщение Mr.Smart » 25.01.2013 12:07:09

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

А вообще так делать как вы нехорошо!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение BadBoyAlex » 25.01.2013 12:10:27

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


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

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

Сообщение Mr.Smart » 25.01.2013 12:16:24

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

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

Сообщение BadBoyAlex » 25.01.2013 12:43:39

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

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 233

Рейтинг@Mail.ru