Главная страница
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.018 c
1-38160
Vitus
2003-02-04 14:10
2003.02.13
Простой вопрос


3-38135
marsello
2003-01-27 18:35
2003.02.13
пользователей InterBase


1-38212
Урри
2003-02-04 12:53
2003.02.13
try ... finally


7-38574
alex_bf
2002-12-07 12:54
2003.02.13
Как запрятать файл?


9-38000
Ev_genus
2002-05-10 12:41
2003.02.13
Чем DelphiX хуже Direct API. (Это не вопрос)