Главная страница
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.013 c
3-31163
Step[B.M.]
2003-06-19 09:04
2003.07.10
Снова об ADO и Excel


3-31136
ZDN
2003-06-18 09:23
2003.07.10
MSSQL, Oracle & DB2


1-31177
Новенький
2003-06-27 20:51
2003.07.10
Edit и ListBox


1-31211
A_ndrew
2003-06-28 20:38
2003.07.10
TaskBar((


1-31225
softmaster
2003-06-28 21:41
2003.07.10
POPUP menu