Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

загрузка dll-ки [D6, Win95/98]


Страницы:   1 2

_Guest_ ©   (2006-09-29 18:01:00) 

Гружу dll-ку: LoadLibrary(dll); все нормально. Хочу упростить код и вынести поиск файла библиотеки, а затем и загрузку в отдельную процедуру (или функцию - без разницы). И тут начинаются чудеса: ошибка обращения в никуда. Если поставить в отладчике точку останова и выполнять пошагово - снова все нормально. Снова выношу этот кусок кода в TForm.Create - опять все работает. Кто знает, объясните в чем дело.

PS пора перебираться в форум для начинающих, ничего уже не понимаю.


@!!ex   (2006-09-29 18:54:00) [21]

procedure LibraryLoad(var Handle  : THandle);
begin
try
Handle := LoadLibrary('odbfinfo.dll');
if Handle = 0 then
  messagedlg('Не могу загрузить odbfinfo.dll !', mtWarning, [mbOk], 0);
except
 ShowMessage('Багалага');
end;
end;


_Guest_   (2006-09-29 18:51:00) [22]

Извиняюсь(тороплюсь):
procedure LibraryLoad(var Handle  : THandle);
begin
 Handle := LoadLibrary('odbfinfo.dll');
 if Handle = 0 then
   messagedlg('Не могу загрузить odbfinfo.dll !', mtWarning, [mbOk], 0);
end;


> Джо ©   (29.09.06 18:39) [8]
>
> THandle = LongWord;
>
> (с) SystemPas. Коль пошла такая пьянка.
>

Конечно. Но тем не менее?


Palladin   (2006-09-29 18:51:00) [23]

в этой процедуре ошибки нет, она в другом месте...


_Guest_   (2006-09-29 18:48:00) [24]

Согласен, а теперь:

procedure LibraryLoad(var Handle  : THandle);
begin
  Handle := LoadLibrary('odbfinfo.dll');
  if Handle = 0 then
    messagedlg('Не могу загрузить ' + NameFile + ' !', mtWarning, [mbOk], 0);
end;

Выполнение приводит к "Access violation at adress..."  ?


Джо   (2006-09-29 18:39:00) [25]

_Guest_  
> THandle не Integer,  а Word по-моему


THandle = LongWord;

(с) SystemPas. Коль пошла такая пьянка.


Джо   (2006-09-29 18:38:00) [26]

> [6] _Guest_   (29.09.06 18:34)
> При чем тут StrPCopy ?

При том, что в приведенном коде эта функцию используется принципиальноневерно. Судить о чем-то другом даже не берусь, ибо у меня перед глазами есть только код, приведенный Вами. Некорректный.


_Guest_   (2006-09-29 18:34:00) [27]


> Джо ©   (29.09.06 18:27) [4]
> StrPCopy function
> The destination buffer must have room for at least Length(Source)+1
> characters.
> (c) Delphi Help.

При чем тут StrPCopy ? Я вместо Dst могу 'OdbfInfo.dll' прямо в вызове прописать - результат тот же самый.

> @!!ex ©   (29.09.06 18:28) [5]
> TFileName
> THandle
> А INteger и String  не рулят?

THandle не Integer,  а Word по-моему, а аргумент у  LoadLibrary не String, а PChar. Еще отмазы ? :)


@!!ex   (2006-09-29 18:28:00) [28]

TFileName
THandle
....
А INteger и String  не рулят?

P.S.
Какой то странный код.... ИМХО


Джо   (2006-09-29 18:27:00) [29]

StrPCopy function
---
The destination buffer must have room for at least Length(Source)+1 characters.

(c) Delphi Help.


_Guest_   (2006-09-29 18:21:00) [30]


procedure LibraryLoad(NameFile : TFileName; var Handle  : THandle);
var
 NF, Dirs : String;
 Dst : PChar;
begin
 

 {Этот кусок просто ищет файл}
 Dirs := MProject.GetDirectories(sftLibrary);
 NF := CheckFile(NameFile, Dirs);
 Dst := '';
 Dst := StrPCopy(Dst, Nf);
 {}
 
 if NF <> '' then
 begin
   Handle := LoadLibrary(Dst);
   if Handle = 0 then
     messagedlg('Не могу загрузить ' + NameFile + ' !', mtWarning, [mbOk], 0);
 end else
 begin
   Handle := 0;
   messagedlg('Не могу найти ' + NameFile + ' !', mtWarning, [mbOk], 0);
 end;
 LibDbf := Handle <> 0;
end;

Использую эту процедуру при создании главной формы: LibraryLoad('OdbfInfo.dll', OdbfInfo_Handle)
Освобождаю библиотеку при выходе


Dmitrij_K   (2006-09-29 18:12:00) [31]

Для начала покажи код.


Palladin   (2006-09-29 18:08:00) [32]


> Хочу упростить код и вынести поиск файла библиотеки,

А как ты это хочешь? Кто может понять чего ты там натворил и как это выглядит? В гости к тебе заявиться и на экран посмотреть?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо