Каковы сильные и слабые стороны использования VTable/COM-ориентированных API?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Каковы сильные и слабые стороны использования VTable/COM-ориентированных API?

Сообщение Anonymous »

В настоящее время я разрабатываю библиотеку.

Я хочу, чтобы эта библиотека поддерживала стабильный интерфейс для старых приложений.

Однако она должна иметь возможность расширения.

Она действует как уровень аппаратной абстракции.
Графические библиотеки OpenGL, Vulkan или DirectX подходят ближе всего с точки зрения требований.
Сравнение их выявило три разных подхода к обеспечению API:
  • OpenGL предоставляет определенный набор стабильных символов, тогда как остальные символы необходимо получать во время выполнения с помощью GetProcAddress или dlsym. Для этого пользователю необходимо либо получить указатели функций самостоятельно, либо использовать библиотеку, такую как GLEW, GLProxy или широко используемую сейчас Epoxy.
Это кажется довольно громоздким.
  • Vulkan решил применить аналогичный подход, экспортируя только символы основного профиля.

    Однако, что особенно важно, многие Доступ к функциям, специфичным для расширения, можно получить через односвязный список, передаваемый функциям, информирующий о расширениях структуры.
Теперь мы подошли к сути моего вопроса:
  • API DirectX использует единственную функцию, с которой необходимо связать связь.

    Код: Выделить всё

    Direct3DCreate9
    , который вызывается путем передачи параметра, определяющего версию заголовков, которые использовались во время компиляции. После этого принимается указатель на непрозрачный объект, к которому можно получить доступ через виртуальные функции.
Мне это кажется самым простым подходом.

И я не понимаю, почему другие библиотеки не выбрали этот вариант.

Наверное, мне чего-то не хватает.
Я ценю любой отзыв об опыте поддержки или использования различных подходов API!

Подробнее здесь: https://stackoverflow.com/questions/798 ... ntric-apis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»