Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: CL | DM;

Вниз

Ошибка при выгрузке DLL.   Найти похожие ветки 

 
evg ©   (2003-09-02 09:00) [0]

Уважаемые господа! Вопрос такого рода: имеется основная программа и DLL к ней. В DLL имеется класс, реализующий некоторый интерфейс. В секции initialization создается экземпляр объекта, в секции finalization он уничтожается. DLL экспортирует функцию, возвращающую интерфейс объекта. Основная программа явно загружает DLL, получает с помощью этой функции интерфейс и вызывает его методы. Все.
Все работает. Но почему-то возникает ошибка при уничтожении объекта в DLL. Отслеживал в CPU Window - сбоит функция _FreeMem. Если не вызывать экспортируемую функцию, ошибок не возникает.
Примерный текст программы:

library foo;
uses</bb> Unit1;
...
function QueryInterface: IInterface; stdcall;
begin
Result:=IMyIntf(Obj);
end;

exports QueryInterface;

begin
end;

-------------------------
unit Unit1;

type TObj = class(TInterfacedObject, IMyIntf)
....
end;

var Obj: TObj;

initialixation
Obj:=TObj.Create;
finalization
Obj.Free;
end;

------------------------
в программе

type TProc = function: IInterface; stdcall;

var h: THandle;
Proc: TProc;

h:=LoadLibrary("Foo.dll");
Proc:=GetProcAddress(h, "QueryInterface");
intf:=IMyIntf(Proc);
<вызов методов IMyIntf>
FreeLibrary(h);


 
evg ©   (2003-09-02 09:58) [1]

Решение нашел сам, так что отвечу сам себе. Дело в том, что TInterfacedObject уничтожает сам себя при достижении счетчика ссылок на него (FRefCount) нуля. Поэтому явное уничтожение объекта не требуется.


 
Skier ©   (2003-09-02 11:05) [2]


> Решение нашел сам, так что отвечу сам себе. Дело в том,
> что TInterfacedObject уничтожает сам себя при достижении
> счетчика ссылок на него (FRefCount) нуля

С этим не поспоришь. :)



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.017 c
9-48389
Skyslider
2002-08-13 18:54
2003.09.15
Пошаговое создание платформенной стрелялки.


1-48549
Юля П
2003-09-02 08:36
2003.09.15
Округление чисел


1-48563
BOA_KAA
2003-09-04 12:54
2003.09.15
TFileStream & String


14-48751
Kost
2003-08-28 12:58
2003.09.15
Помогите с проблемой...


1-48539
MakNik
2003-09-01 17:34
2003.09.15
как возводить число в любую степень???