проверить совместимость разделяемой библиотеки перед ее динамической загрузкой - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть программа и набор «плагинов» (разделяемых библиотек), которые основная программа загружает по запросу во время выполнения.

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

Я ищу способ, чтобы основная программа могла проверить, поддерживается ли подключаемый модуль, который она пытается загрузить (использует соответствующие структуры данных).

Есть ли творческий подход, который вы можете придумать, делая это?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Функция в плагине возвращает информацию о версии протокола, которую он поддерживает (протокол плагина не ограничивается тем, что он предоставляет, это также то, что требуется от вызывающей программы.)

0 голосов
/ 13 апреля 2011

Ответ AProgrammer (или просто экспорт глобальной переменной с номером версии) будет работать, но имейте в виду, что ни одно решение не является надежным или безопасным от вредоносных файлов плагинов.Загруженные модули работают в том же пространстве памяти, что и ваша программа, с теми же привилегиями, и, к сожалению, динамический загрузчик с удовольствием запустит глобальные конструкторы в плагине, прежде чем вы сможете запросить версию или выполнить какую-либо проверку самостоятельно.( Grumble Кто-нибудь имеет ссылку на глобальные конструкторы, считающиеся вредными?)

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

...