Главная страница
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.018 c
7-48804
AndreiSm
2003-06-24 12:07
2003.09.15
Установка inf драйвера


14-48686
Vlad Oshin
2003-08-27 15:57
2003.09.15
Rouse_, понапиши перлов что ли...


3-48450
Nestor
2003-08-26 14:44
2003.09.15
Проблема при выводе в Label


3-48422
Miau
2003-08-23 14:42
2003.09.15
ADO & DLL


1-48508
Atreides
2003-09-02 16:04
2003.09.15
Как замерить интервал между двумя событиями с точностью до 0.01с?