Главная страница
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.028 c
14-48692
Grouzd[E]v
2003-08-24 18:38
2003.09.15
Будете смеятся: как работать с архивами??? - я еще новичок :(((


3-48445
BKGG
2003-08-24 18:41
2003.09.15
Я питаюс присоединиться к таблице Telephones, расположенную в баз


1-48515
Sfagnum
2003-09-02 15:30
2003.09.15
Можно ли результатом функции сделать динамический массив записей


9-48390
Paroplan
2003-03-02 11:19
2003.09.15
Кто знает как увеличить кол-во оперативки под делфи а?


14-48777
Dimka Maslov
2003-08-25 18:54
2003.09.15
Колбаса