В Windows у вас есть COM, который делает что-то подобное. У вас есть интерфейс и обеспечить реализацию в DLL. Вы регистрируете DLL, и этот процесс регистрации делает запись в реестре, отображающую интерфейс (UUID) и DLL, которая обеспечивает реализацию. Основываясь на этой информации, при выполнении QueryInterface () служба COM загрузит соответствующую DLL и создаст экземпляр объекта реализации, типизирует его в соответствии с запрошенным типом интерфейса и вернет.
Это IoC с использованием COM. Поскольку COM реализован на «C», я уверен, что он просто прорабатывает детали, чтобы заставить это работать на вашей встроенной системе. Вместо реестра вам понадобится файл для хранения этого отображения между интерфейсом, реализацией и DLL. Это сделано в Catia (из Dassault Systemes) в их архитектуре CNext (V5 / V6). Он называется структурой моделирования объектов.
Шаги для достижения этой цели:
- Определение соглашения об именах для функции, которая возвращает указатель на интерфейс
- Создать файл с интерфейсом и DLL, в котором он реализован
- Реализация интерфейса в DLL и обновление файла в # 2
- В основном коде прочитайте файл и создайте карту интерфейса и DLL
- Когда вам нужен интерфейс, загрузите DLL, если она не загружена, и получите адрес функции, которая возвращает указатель на интерфейс (на основе определенного соглашения об именах)
Пример: Для интерфейса IDoSomething вашей функцией может быть Get_IDoSomething ().
Поскольку мы получаем адрес функции на основе имени, это делается во время выполнения, а не во время компиляции.
- Вызовите функцию по адресу, который вы получили от # 5. Теперь у вас есть указатель на интерфейс, основанный на реализации в DLL, как указано в # 3
Поэтому вы привязываете интерфейс к его реализации во время выполнения.