Изучаю WinApi, столкнулся в одной книге с таким описанием:
Вместо этого оно (Windows-приложение) обращается к функциям GDI, GDI транслирует эти обращения к программным драйверам физических устройств, обеспечивая аппаратную независимость приложений.
И тут меня возник вопрос:
При компиляции C++ кода с применением WinApi мы получаем файлы .obj на языке ассемблера которые компонуются (так? не уверен что прав). Возможна ли при этом трансляция? Т.е. graphics device interface (GDI)(как я предполагаю набор структур и функций) выступает в роли аналога Java-машины, благодаря которой возможна трансляция в промежуточный байт-код?
Никакого промежуточного байт-кода нет.
Имеется в виду "слоистая" структура программного обеспечения операционной системы. Приложение вызывает функции операционной системы - функции GDI, которые находятся в своих DLL, например, и которые уже обращаются к конкретному аппаратному обеспечению. Опять же, через еще один слой - драйверов.
Т.е., например, имеем стандартный оператор
fstream << "Hello, world";
Он внутри стандартной библиотеки обращается к функциям Windows, скорее всего к WriteFile
. Соответствующий код этой функции в Kernel32.dll
будет уже обращаться к конкретным драйверам - разобравшись, где и на каком носителе этот файл - к драйверам USB, диска или еще чего. Которые уже на аппаратном уровне будут выполнять запись.
Т.е. ваша программа не должна знать, как работать с тем или иным устройством - для этого есть иные слои программного обеспечения. И программа будет работать независимо от того, выполняется ли она на машине с SDD, обычным винтом или работает с сетевым файлом на другом конце света. В программе есть только обращение к функции в Kernel32.dll
, и которого и близко нет в исходном тексте.
Так более-менее понятно?
В этой фразе
Вместо этого оно (Windows-приложение) обращается к функциям GDI, GDI транслирует эти обращения к программным драйверам физических устройств, обеспечивая аппаратную независимость приложений
слово "транслирует" используется не в том смысле, как трансляция программ. Это означает, что делегирует конкретную работу по выполнению запроса драйверам физических устройств. То есть вводится промежуточный слой в виде Windows API, который является промежуточным интерфейсом между прикладной программой и физическими устройствами с их драйверами. Это позволяет прикладной программе не знать детали, что происходит на физическом уровне. Эти детали скрыты в Windows API, которое для приложений предоставляет общий интерфейс.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Существует ли возможность создания 1-битных изображений и конвертации в этот формат изображений иных форматов с помощью библиотеки imagemagick?...
В игре присутствует модель игрокаСуть в том, что при нажатии W игрок просто летит вверх
Программа читает число с flash-памяти внешнего устройства (целое, 1 байт, беззнаковое)Для его программной интерпретации используется перечисление: