Предположим, что у вас есть функция read_key
и обычно это что-то не так. Вы должны быть в состоянии заменить его своей функцией read_key_myfunction
, и он делает другие вещи. Общий подход, разумеется, заключался бы в создании указателей функций массива и регистров или с использованием простых операторов switch (или обоих).Динамический интерфейс для функций в C
Но моя цель немного шире: люди должны иметь возможность писать свой C-материал и НЕ мешать моему коду, и он все равно должен регистрироваться. Конечно, я говорю им, какой интерфейс реализовать.
Теперь они в основном выполняют программу для моего программного обеспечения, которое я динамически загружаю на основе параметра конфигурации. Подумайте об этом как о механизмах OpenSSLs: каждый может написать свой собственный движок, скомпилировать его как dll/so и распространить. Им не нужно изменять (или знать) код OpenSSLs, если они придерживаются определенного интерфейса.
Я просто хочу то же самое (в конце концов это будет оболочка для функций двигателя OpenSSL) для моей программы.
Коллега предложил мне использовать функцию в каждом файле и динамически загружать библиотеки. Это звучит как хорошее решение для меня, но я не совсем удовлетворен, так как я не вижу OpenSSL, используя любую не зависящую от двигателя функцию в своем коде двигателя.
Если некоторые вещи непонятны вот мой конкретный пример:
Я простирающаяся программу под названием sscep, который реализует протокол для автоматического обновления сертификата. В будущем в HSM будет много криптографии (и сейчас это должно происходить в Windows Key Management (к которому обращается капитальный движок OpenSSL)).
Хотя OpenSSL уже обслуживает общий интерфейс, есть некоторые вещи, которые мне нужно сделать заранее, и это зависит от используемого двигателя. Я также хочу открыть возможность для всех остальных быстро продлить его, не вникая в мой код (например, я имел от человека передо мной).
Если у кого-то есть идеи, было бы полезно увидеть какой-то ориентир. Заранее спасибо.
Я буду изучать это, но мне кажется, что это то, что мне нужно. Спасибо. – javex