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

Вниз

COM   Найти похожие ветки 

 
SergeyP_2000   (2003-02-05 12:00) [0]

Пытаюсь написать сервис с возможностью загрузки plugin"ов. Plugin"ы - DLL -файлы (BPL я не смог заставить подключаться к сервису NT). В библиотеке описан класс, наследующий некоторый интерфейс:
type
IPlugin = interface["{D57BDDD7-995E-4454-B1C0-32C1304DBD38}"]
function GetValue: integer; end;

TPlugin = class(TInterfacedObject, IPlugin)
public
function GetValue: integer; // Эта функция возвращает некоторое значение (будем считать так: Result:=12345)
end;
Также в библиотеке описана экспортируемая функция, возвращающая указатель на интерфейс созданного экземпляра класса:
function GetPlugin: IPlugin;
begin
Result:=TPlugin.Create;
end;

В программе сервисе:
type
TGetPlugin = function: IPlugin; stdcall;
var
h: THandle;
fPlugin : IPlugin;
GetPlugin: TGetPlugin;
begin
h:=LoadLibrary("plugin.dll");
GetPlugin:=GetProcAddress(h, "GetPlugin");
fPlugin:=GetPlugin;
i:=fPlugin.GetValue;
FreeLibrary(h);
...
end;
Происходит следующее: библиотека загружается, создается экземпляр класса, нормально отрабатывает метод класса GetValue, но при FreeLibrary происходит исключение Access Violation. Помогите разобраться. Заранее благодарен.


 
Clickmaker ©   (2003-02-05 12:07) [1]

Думаю, перед освобождением DLL нужно убить экземпляр созданного объекта, чтобы не осталось ссылок на него:
fPlugin := nil;
FreeLibrary(h);



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

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

Наверх




Память: 0.47 MB
Время: 0.013 c
3-38033
KIR
2003-01-28 20:39
2003.02.13
К вопросу о визуальном представлении древовидной структуры данных


14-38450
Ihtiandr
2003-01-30 14:56
2003.02.13
TimaStamp


1-38383
Diod
2003-02-02 07:33
2003.02.13
Фйлы и edit


14-38484
Ketmar
2003-01-22 15:05
2003.02.13
что делать?


14-38544
Кот Бегемот
2003-01-29 10:07
2003.02.13
Сегодня ниче спрашивать и хамски отвечать не буду :)