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

Вниз

Динамическая загрузка DLL   Найти похожие ветки 

 
maxic   (2003-06-26 16:40) [0]

Загружаю библиотеку, вызываю функции - все нормально. Когда пытаюсь выгрузить ее - ошибка "access violation" и как всегда "память не может быть write" :)
Подскажите, что не так?

type
TInit = procedure;

var
Init: TInit;
DllHandle: THandle;
begin
DllHandle:=LoadLibrary(PChar(DllFile));
if DllHandle >= 32 then
begin
@Init:=GetProcAddress(DllHandle, "Init");
if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Init;
FreeLibrary(DllHandle);
end;
end;


 
Skier ©   (2003-06-26 16:42) [1]

>maxic (26.06.03 16:40)
как объявлена Init в DLL ? Код !


 
maxic   (2003-06-26 16:43) [2]

procedure Init; export;


 
Skier ©   (2003-06-26 16:47) [3]

в DLL :

procedure Init; stdcall;
begin
ShowMessage("Hello, world !");
end;

//.......................

exports
Init index 1;

в приложении :

type
TInit = procedure; stdcall;

var
Init: TInit;
DllHandle: THandle;
begin
DllHandle:=LoadLibrary(PChar(DllFile));
if DllHandle >= 32 then
begin
@Init:=GetProcAddress(DllHandle, PChar("Init"));
if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Init;
FreeLibrary(DllHandle);
end;
end;


Не спасёт ?


 
maxic   (2003-06-26 16:51) [4]

Попробуем :)


 
Юрий Федоров ©   (2003-06-26 16:53) [5]

Возможно, баг в библиотеке в процедуре Init
И еще :

if not Assigned(DialerInit) then
begin
ShowMessage("Не удалось вызвать процедуру Init.");
exit;
end;
Нет точки входа в процедуру, выходим.
А кто будет библиотеку выгружать ?


 
Skier ©   (2003-06-26 16:53) [6]

Oops !
И ещё : почему пытаешься получить Init, а проверяешь на DialerInit ( if not Assigned(DialerInit)) ?


 
Skier ©   (2003-06-26 17:00) [7]

>maxic
И хорошо было бы использовать try-finally-end


 
maxic   (2003-06-26 17:06) [8]

> И ещё : почему пытаешься получить Init, а проверяешь на DialerInit (if not Assigned(DialerInit)) ?
Это опетачка, как и не выгрузка при ошибке...


 
Skier ©   (2003-06-26 17:11) [9]

>maxic (26.06.03 17:06)

> Это опетачка

Осторожней, батенька. Программирование штука точная, все
опечатки настораживают...:)


 
Digitman ©   (2003-06-26 17:11) [10]

приведи полный код Init() ... и код разделов инициализации/финализации модулей в составе DLL



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
11-31166
Alexander
2002-10-28 22:33
2003.07.10
Прудложение по реструктуризации и стандартизации компонент.


1-31290
Oleg
2003-06-26 15:00
2003.07.10
Подскажите пожалуйста как


14-31509
race1
2003-06-22 10:27
2003.07.10
winx[ <-> win98


11-31168
IZVER
2002-11-01 13:09
2003.07.10
Как сохранить stream в файл?


1-31324
INCOGNITO
2003-06-26 23:38
2003.07.10
Диалог выбора папки