Главная страница
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.021 c
14-31514
picaroon
2003-06-25 10:01
2003.07.10
Помогите кто чем может с кодом


3-31130
Max_
2003-06-18 10:59
2003.07.10
Query.Last в отдельном потоке?


14-31469
Rolf
2003-06-24 08:59
2003.07.10
Базы данных


1-31244
race1
2003-06-28 19:33
2003.07.10
menu vs. shift


1-31235
gfhjs
2003-06-29 14:11
2003.07.10
У меня глюки или у программы?