Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.04.2013, 15:32
sova_bos sova_bos вне форума
Прохожий
 
Регистрация: 27.03.2012
Адрес: Ставрополь
Сообщения: 12
Версия Delphi: XE3/7
Репутация: 10
Вопрос переменная типа THandle

Необходимо досконально разобраться в коде (уже жалею, что подписалась на эту работу )

Вот кусочек кода
Код:
var  DllHandle: THandle;
...
DllHandle := LoadLibrary('ITLSSPProc.dll');
 if DllHandle>=32 then       
   begin ... end
;

вопрос: в переменной загружена библиотека (внутренности которой, кстати, тоже вызывают бурю негодования), как можно эту переменную сравнить с числом?
Пробовала написать так для эксперимента:
Код:
var  DllHandle: THandle;
...
DllHandle := 32;
 if DllHandle>=32 then       
   begin ... end
;

а вот нифига)
__________________
Всё будет правильно

Последний раз редактировалось sova_bos, 23.04.2013 в 15:43.
Ответить с цитированием
  #2  
Старый 23.04.2013, 15:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  DllHandle: HMODULE;
begin
  DllHandle:=LoadLibrary('xxx');
  if DllHandle<>0 then
  begin
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 23.04.2013, 16:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

MSDN советует еще проверять GetLastError <> ERROR_SUCCESS для получения детальных подробностей.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 23.04.2013, 16:10
sova_bos sova_bos вне форума
Прохожий
 
Регистрация: 27.03.2012
Адрес: Ставрополь
Сообщения: 12
Версия Delphi: XE3/7
Репутация: 10
По умолчанию

да оно и в таком виде работает
Код:
var  DllHandle: THandle;
...
DllHandle := LoadLibrary('ITLSSPProc.dll');
 if DllHandle>=32 then      
   begin ... end
я не пойму КАК это работает, и почему можно сравнить с числом
__________________
Всё будет правильно
Ответить с цитированием
  #5  
Старый 23.04.2013, 16:14
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну потому, что указатель - это число.

Читай MSDN.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
sova_bos (23.04.2013)
  #6  
Старый 23.04.2013, 16:18
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Handle - это уникальный идентификатор, который представляет собой целое 32-х битное (4-х байтное) число. Handle позволяет обращаться к чему-либо в системе не по имени (или еще чему там можно придумать), а по соответствующему уникальному идентификатору. Например каждый элемент окна имеет свой handle. Все значения идентификаторов разные, т.е. уникальные. Если есть два одинаковых окна, то элементы этих окон все равно будут иметь разные идентификаторы. Понятие handle используется не только для идентификации элементов окна, но и например для файлов, процессов, потоков (threads) и т.д. На самом деле ОС работает с файлами, процессами, потоками (threads) не по их имени, а по их идентификатору.
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Этот пользователь сказал Спасибо Black Raider за это полезное сообщение:
sova_bos (23.04.2013)
  #7  
Старый 23.04.2013, 16:36
sova_bos sova_bos вне форума
Прохожий
 
Регистрация: 27.03.2012
Адрес: Ставрополь
Сообщения: 12
Версия Delphi: XE3/7
Репутация: 10
По умолчанию

Всем большое спасибо =)
__________________
Всё будет правильно
Ответить с цитированием
  #8  
Старый 23.04.2013, 16:56
sova_bos sova_bos вне форума
Прохожий
 
Регистрация: 27.03.2012
Адрес: Ставрополь
Сообщения: 12
Версия Delphi: XE3/7
Репутация: 10
По умолчанию

Хочу еще поразмышлять по поводу этого кода. Автор, к сожалению для меня недоступен, но вот интересно же, зачем сравнивать DllHandle с 32? сколько я не тестила, значение всегда какое-то 8-ми значное число, при чем результаты иногда повторяются... поставила в условии 1000, все работает так же
__________________
Всё будет правильно
Ответить с цитированием
  #9  
Старый 23.04.2013, 17:14
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Цитата:
Сообщение от sova_bos
но вот интересно же, зачем сравнивать DllHandle с 32? сколько я не тестила, значение всегда какое-то 8-ми значное число
Цитата:
Возвpащаемое значение:

В случае успешного завеpшения - идентификатоp экземпляpа модуля библиотеки (значение, больше 32); если нет, то его значение меньше 32 и является одним из следующих: (0) нет памяти; (5) попытка связать задачу; (11) невеpный файл EXE; (12) пpикладная задача из OS/2; (13) пpикладная задача из DOS 4.0; (14) невеpный тип EXE; (15) незащищенный pежим.
LoadLibrary как-то так.....
указанные значения являются константами
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
  #10  
Старый 23.04.2013, 17:48
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

32 - это пережиток 16-разрядных систем.
Теперь, в случае ошибки, функция возвращает 0, а признак ошибки нужно проверять GetLastError.
Ответить с цитированием
  #11  
Старый 23.04.2013, 17:55
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

LoadLibrary какбе возвращает адрес, по которому была загружена дллка.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 23.04.2013, 17:58
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
LoadLibrary какбе возвращает адрес, по которому была загружена дллка.
Неправда ваша
Цитата:
Сообщение от MSDN
Return value

If the function succeeds, the return value is a handle to the module.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #13  
Старый 23.04.2013, 18:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Дак а если сходить по этому адресочку?
Я ходил, там сигнатура MZ и PE заголовок.

Вот пруфы:
hDll := LoadLibrary('мая длл');
Значение:

Дамп:
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 23.04.2013 в 18:06.
Ответить с цитированием
  #14  
Старый 23.04.2013, 18:11
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Неправда ваша
Да, это хендл. Который на деле адрес. Многие умники юзают так: делают LoadLibrary('kernel32.dll'), потом начиная от возвращенного значения ищут в памяти какой-нибудь набор байт (который, к примеру, представляет собой начало функции CreateFile). Находят - узнают адрес функции. Эдакий GetProcAddress без вызова оного и без анализа таблицы экспорта.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #15  
Старый 24.04.2013, 09:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от sova_bos
зачем сравнивать DllHandle с 32?
сравнивай с 0 и не забивай себе голову:
Цитата:
Return value
If the function succeeds, the return value is a handle to the module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter