Главная страница
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
6-38416
Sonick
2002-12-23 13:25
2003.02.13
Help plizzz?


3-38109
sewix
2003-01-27 08:50
2003.02.13
QuickReport отчет не из нестандартной базы


3-38016
Андрусь
2003-01-28 17:47
2003.02.13
Как Raw перебэхать в Number


3-38063
kaif
2003-01-25 01:32
2003.02.13
Захват файла gdb ???


3-38019
Sirus
2003-01-29 07:29
2003.02.13
Как вместо сообщения об ошибке выдать свое сообщение???