![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Delphi programs in API.
На английском. Очень подробно всё описано, плюс есть исходные коды готовых юнитов. Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял). |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Писал я недавно патч для включения крови в German версии Turok 2. Решил, чтобы не маяться с CreateWindow(), сделать диалог в ресурсах. Взял из FASM пример EXAMPLES\DIALOG\DIALOG.ASM и переколбасил его под свои нужды. Всё работает, но странности начались, когда я решил навести последний штрих - добавить manifest для XP/Vista/7.
Программа стала сразу выходить после запуска. Офигев от такого безобразия начал отлаживать - выяснилось, что DialogBoxParam() сразу выходит даже не отображая окно. Убираем манифест - всё снова работает. Пошёл гуглить и натолкнулся вот на такую статью: Особенность InitCommonControlsEx в Windows XP (кстати, там на сайте и другие статьи интересные есть - их немного, так что пробегитесь по ним, кому интересно) В общем, суть такова: чтобы программы с манифестом и DialogBoxParam() работали как надо, нужно чтобы в импорте была библиотека COMCTL32.DLL. Это можно сделать, вызвав, к примеру, InitCommonControls(). Я решил её не вызывать (толку-то всё равно не будет), а просто перепрыгнуть: CODE jmp @ICC invoke InitCommonControls @ICC: Мне главное, чтобы в импорте COMCTL32.DLL была, а если ни одна функция оттуда не вызывается, то компилятор удаляет её из импорта. Вот такая фигня. Спасибо сказали:
|
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 21:29 |