Главная страница
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.48 MB
Время: 0.014 c
1-31282
kudatsky
2003-06-26 12:09
2003.07.10
Ini-файл под Win-2000


1-31205
A_ndrew
2003-06-28 19:15
2003.07.10
помогите, очень срочно - RichEdit!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


1-31245
gfhjs
2003-06-29 14:50
2003.07.10
А как создать такой СтрингЛист?


3-31145
Rel_
2003-06-18 16:39
2003.07.10
считывание данных из таблицы (.dbf)


1-31347
Saint
2003-06-27 05:51
2003.07.10
Как прервать показ формы для потомка TCustomForm