@DarkByte2015

Как пишутся кроссплатформенные библиотеки?

Давно интересует такой вопрос: как вообще пишется кроссплатформенные библиотеки? В общих чертах? Т.е. я могу предположить лишь два варианта:

либо пишется для каждой ОС (винда, линукс, яблоко) отдельная реализация основанная на апи системы и потом через макросы делается чтобы например если винда то использовалась виндовая реализация и т.д.

либо как то может на ассемлере пишется... Т.е. например если библиотека GUI (типа Qt) то например вручную отрисовка кнопок и прочих элементов интерфейса попиксельно и т.д. Тут даже не могу представить насколько это муторно и реально ли вообще.
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
Rou1997
@Rou1997
либо пишется для каждой ОС (винда, линукс, яблоко) отдельная реализация основанная на апи системы и потом через макросы делается чтобы например если винда то использовалась виндовая реализация и т.д.

Примерно так, для компиляции - макросы препроцессора, для выполнения - есть разные способы, можно через те же макросы менять значения констант.

либо как то может на ассемлере пишется...

В доступе ниже прикладного уровня главную роль играет не ЯП, а внедрение в ОС, штатными способами (драйвера и т.п.) или с помощью инъекций и т.п., Assembler здесь не главное, это всего лишь очень гибкий и очень неудобный "формат" исполняемого кода и не более.

вручную отрисовка кнопок и прочих элементов интерфейса попиксельно и т.д.

По пикселям никто не рисует, с другой стороны использования стандартных контролов WinAPI (CreateWindow) "в чистом виде" тоже избегают, они недостаточно гибкие и в конце-концов их в нем просто очень мало, лучше реализовать свои "велосипеды", но для отрисовки используется максимально высокоуровневый интерфейс GDI/GDI+/OpenGL/DirectDraw который рисует изображения "зашитые" в библиотеку, и вовсе не по пикселям, а целиком.
А если требуется соответствие графики системной теме оформления, то используется еще и UxTheme - тоже библиотека из WinAPI.

Потому что как тогда объяснить что в том же Qt на всех ОС внешний вид контролов одинаковый?

Разве? В Qt Widgets вроде бы как раз system look and feel.
А вот в Quick (QML) - да, там изображения "зашиты" в саму библиотеку и она их рисует через системное API каждой ОС.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Первый вариант. API системы + дефайны для выбора реализации.
Для рендеринга виджетов может быть использован разный бэкэнд. Можете погуглить (на английском конечно же) как Qt рендерит виджеты, благо материала много.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы