Плагины в С++ сложны, потому что ABI не определен правильно, и каждый компилятор (или его версия) следует своим собственным правилам. Однако COM на Windows показывает, что можно создать минимальную подключаемую систему, которая позволяет программистам с разными компиляторами создавать плагины для хост-приложения с помощью простого интерфейса.
Давайте будем практичны и оставим стандарт С++, что не очень полезно в этом отношении, в сторону на минуту. Если я хочу написать приложение для Windows и Mac (и, возможно, Linux), которое поддерживает плагины С++, и если я хочу дать авторам плагинов достаточно большой выбор компиляторов (скажем, менее двух лет версий Visual С++, GCC или компилятор Intel С++), на какие функции С++ я могу рассчитывать?
Конечно, я предполагаю, что плагины будут написаны для конкретной платформы.
Сверху моей головы, вот некоторые возможности С++, о которых я могу думать, с тем, что, на мой взгляд, является ответом:
- vtable layout, использовать объекты через абстрактные классы? (Да)
- встроенные типы, указатели? (Да)
- структуры, союзы? (Да)
- исключения? (Нет)
- extern "C" функции? (Да)
- stdcall non-extern "C" функции со встроенными параметрами? (Да)
- non-stdcall non-extern "C" функции с пользовательскими параметрами? (Нет)
Я был бы признателен за любой опыт, который у вас есть в этой области, которую вы могли бы поделиться. Если вы знаете какое-нибудь умеренно успешное приложение, в котором есть подключаемая система С++, это тоже круто.
Карл