Главная страница
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.03 c
1-48593
Теран
2003-09-03 17:21
2003.09.15
Форматирование ячеек Excel из Delphi


1-48501
hfa
2003-09-02 18:21
2003.09.15
При установки нового пакета с компонентами вылезает ошибка типа


1-48634
oduvan
2003-08-26 20:03
2003.09.15
Скролинг в МеМо при поиске...


3-48481
Lamer_of_Delphi
2003-08-22 11:04
2003.09.15
Получение значений ВСЕХ записей!!!


6-48668
M@mbet
2003-07-13 20:03
2003.09.15
Копирование текста в TWebBrowser