![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
загрузка dll-ки [D6, Win95/98]
_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]
> Хочу упростить код и вынести поиск файла библиотеки,
А как ты это хочешь? Кто может понять чего ты там натворил и как это выглядит? В гости к тебе заявиться и на экран посмотреть?