Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
1-38192
drin
2003-02-04 13:59
2003.02.13
Ras API


1-38189
Andrey-k
2003-02-02 22:45
2003.02.13
Help. Exel. Как сделать WorkBook в Read-Only или запаролить?


1-38367
Anton
2003-02-04 10:23
2003.02.13
Как можно русифицировать ошибки, есть ли у них номер


3-38023
Roma111
2003-01-29 10:26
2003.02.13
Импорт данных в IB6


3-38032
Бук
2003-01-29 08:15
2003.02.13
Какую БД взять?




   Наверх