Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
14-38543
Ketmar
2003-01-27 17:10
2003.02.13
высокая поэзия


3-38028
alex_bredin
2003-01-29 10:35
2003.02.13
как сбросить счетчик поля + в базах paradox (кроме удаления пол


14-38511
OlegKrt
2003-01-28 14:12
2003.02.13
Кто-нибудь может посоветовать генератор отчетов типа как в 1С


1-38356
SergeN
2003-02-03 09:45
2003.02.13
Циклы


7-38587
Андрей Ваганов
2002-12-10 15:40
2003.02.13
Как убрать прогу с таскбара?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский