четверг, 8 сентября 2011 г.

Почему функция SetWindowsHookEx принимает параметр HINSTANCE?

Это перевод Why does SetWindowsHookEx take an HINSTANCE parameter? Автор: Реймонд Чен.

Анонимный комментатор спросил, почему функция SetWindowsHookEx принимает параметр HINSTANCE, если она всё равно сконвертирует это значение в имя файла.

среда, 7 сентября 2011 г.

Как злоупотребляли оконными ловушками в Win16

Это перевод One way people abused hooks in 16-bit Windows. Автор: Реймонд Чен.

В прошлый раз мы увидели, как в 16-битных Windows реализуются оконные ловушки. Даже хотя значения HHOOK являются не прозрачными типами данных ("чёрным ящиком"), с которыми нужно работать как с описателями, многие программы "знали слишком много, чтобы стать опасными" - и воспользовались тем фактом, что значения HHOOK были просто указателями на предыдущую процедуру ловушки.

вторник, 6 сентября 2011 г.

Как были реализованы оконные ловушки в 16-битных Windows?

Это перевод How were window hooks implemented in 16-bit Windows? Автор: Реймонд Чен.

Механизм отслеживания оконных ловушек был реализован существенно иначе в 16-битных Windows.

понедельник, 5 сентября 2011 г.

Кандидат на звание самого непонятного сочетания клавиш: Shift+F8

Это перевод Candidate for most obscure keyboard shortcut: Shift+F8. Автор: Реймонд Чен.

Так получилось, что одной из самых непонятных сочетаний клавиш является Shift+F8, которая используется в listbox для несмежного расширенного выбора. Господи, сколько же слов.

воскресенье, 4 сентября 2011 г.

Как менее наивный компилятор вызывает импортируемую функцию

Это перевод How a less naive compiler calls an imported function. Автор: Реймонд Чен.

Если функция объявлена со спецификатором dllimport, то это указывает компилятору Visual Studio C/C++, что эта функция импортируется из другого (исполняемого) модуля, а не является обычной функцией в этом же исполняемом модуле. Имея на руках эту информацию, компилятор генерирует немного другой код, поскольку теперь он осведомлён об особенностях импортируемых функций.

суббота, 3 сентября 2011 г.

Вызов импортируемой функции, наивный способ

Это перевод Calling an imported function, the naive way. Автор: Реймонд Чен.

Библиотека импорта (import library) разрешает (resolve) символы импортируемых функций, но к ней не обращаются до этапа компоновки. Давайте посмотрим на наивную реализацию, когда компилятор слепо не осведомлён о существовании импортируемых функций.

пятница, 2 сентября 2011 г.

Смена дизайна импорта в 32-х битных Windows

Это перевод Rethinking the way DLL exports are resolved for 32-bit Windows. Автор: Реймонд Чен.

За последние дни мы узнали, как работает экспорт и импорт функций в 16-битных Windows, а также что экспорт функций в Win32 очень похож на экспорт функций в 16-битных Windows. Но 16-битный импорт был полностью переписан в мире 32-битных Windows.

четверг, 1 сентября 2011 г.

Экспортируемые функции, являющиеся forwarder-ами

Это перевод Exported functions that are really forwarders. Автор: Реймонд Чен.

В прошлый раз мы видели как экспортируемые функции в Win32 ведут себя похоже на экспорт функций в 16-битных Windows - только сместился акцент использования с импорта по номеру на импорт по имени. Этот акцент никак не выражен в формате исполняемого файла; и 16-битные и 32-битные DLL могут экспортировать функции по номеру и имени (и обоим одновременно).

Но в Win32 появляется новый тип экспортируемых функций, известный как forwarder.