![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Необходимо досконально разобраться в коде (уже жалею, что подписалась на эту работу
)Вот кусочек кода Код:
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
|
||||
|
||||
|
Код:
var
DllHandle: HMODULE;
begin
DllHandle:=LoadLibrary('xxx');
if DllHandle<>0 then
begin
end;
end; |
|
#3
|
||||
|
||||
|
MSDN советует еще проверять GetLastError <> ERROR_SUCCESS для получения детальных подробностей.
|
|
#4
|
|||
|
|||
|
да оно и в таком виде работает
Код:
var DllHandle: THandle;
...
DllHandle := LoadLibrary('ITLSSPProc.dll');
if DllHandle>=32 then
begin ... end |
|
#5
|
||||
|
||||
|
Ну потому, что указатель - это число.
Читай MSDN. |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
sova_bos (23.04.2013)
| ||
|
#6
|
|||
|
|||
|
Handle - это уникальный идентификатор, который представляет собой целое 32-х битное (4-х байтное) число. Handle позволяет обращаться к чему-либо в системе не по имени (или еще чему там можно придумать), а по соответствующему уникальному идентификатору. Например каждый элемент окна имеет свой handle. Все значения идентификаторов разные, т.е. уникальные. Если есть два одинаковых окна, то элементы этих окон все равно будут иметь разные идентификаторы. Понятие handle используется не только для идентификации элементов окна, но и например для файлов, процессов, потоков (threads) и т.д. На самом деле ОС работает с файлами, процессами, потоками (threads) не по их имени, а по их идентификатору.
|
| Этот пользователь сказал Спасибо Black Raider за это полезное сообщение: | ||
sova_bos (23.04.2013)
| ||
|
#7
|
|||
|
|||
|
Всем большое спасибо =)
|
|
#8
|
|||
|
|||
|
Хочу еще поразмышлять по поводу этого кода. Автор, к сожалению для меня недоступен, но вот интересно же, зачем сравнивать DllHandle с 32? сколько я не тестила, значение всегда какое-то 8-ми значное число, при чем результаты иногда повторяются...
поставила в условии 1000, все работает так же![]() |
|
#9
|
||||
|
||||
|
Цитата:
Цитата:
указанные значения являются константами |
|
#10
|
|||
|
|||
|
32 - это пережиток 16-разрядных систем.
Теперь, в случае ошибки, функция возвращает 0, а признак ошибки нужно проверять GetLastError. |
|
#11
|
||||
|
||||
|
LoadLibrary какбе возвращает адрес, по которому была загружена дллка.
|
|
#12
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#13
|
||||
|
||||
|
Дак а если сходить по этому адресочку?
Я ходил, там сигнатура MZ и PE заголовок. Вот пруфы: hDll := LoadLibrary('мая длл'); Значение: ![]() Дамп: ![]() Последний раз редактировалось M.A.D.M.A.N., 23.04.2013 в 18:06. |
|
#14
|
||||
|
||||
|
Цитата:
|
|
#15
|
||||
|
||||
|
Цитата:
Цитата:
|