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

Вниз

Динамическая загрузка 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
8-31370
lexa
2003-03-23 17:58
2003.07.10
Как заставить MediaPlayer играть mp3


14-31517
VolanD
2003-06-25 15:05
2003.07.10
Epox 8KTA3L+ and GForce4 MX440 TV-out


14-31397
RIMMER
2003-06-23 00:58
2003.07.10
Куда уходят ветки?


4-31575
Great_Lesh
2003-05-03 00:26
2003.07.10
Запуск программы от имени другого пользователя


1-31255
Anonimus
2003-06-28 16:47
2003.07.10
SizeOf PChar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский