Загрузить класс C ++ по имени из Java - PullRequest
2 голосов
/ 05 марта 2012

Давайте предположим, что у меня есть фреймворк, написанный на Java, и немного кода на C ++, который выполняет ресурсоемкую работу.- Каркас инициализирует цепочку обработки на основе конфигурации базы данных.Единицы обработки (этой цепочки) написаны на C ++.Каждый модуль реализует следующий интерфейс:

class IModule {
public:
    virtual ~IModule() {};
    virtual bool setConfig(ModConfig* config) = 0;
    virtual map<string*,string*>* getStatus() = 0;
};

Я хочу, чтобы разработчики могли реализовать интерфейс IModule на C ++ и создать запись в базе данных, содержащую имя класса.Затем инфраструктура Java автоматически загружает этот класс.- Цель не должна состоять в том, чтобы писать дополнительный связывающий код ни в C ++, ни в Java.Как видно из интерфейса, метод setConfig () получает объект типа ModConfig.Это означает, что должна быть возможность создать экземпляр этого объекта C ++ в Java.

Я оценил следующие технологии: - JNA: только C -> требуется дополнительный код привязки - JNIEasy: сопоставляет объект с объектом напрямую - SWIG: сопоставление объекта с объектом напрямую - BridJ: сопоставление объекта с объектом напрямую - JNI: может быть, решение проблемы?

Резюме: - Загрузить класс C ++ по имени из Java.- Создание объекта C ++ в Java.

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

Заранее спасибо

1 Ответ

1 голос
/ 05 марта 2012

Ваш вопрос относится к конкретной операционной системе (или я неправильно понял). Я не понимаю, что для вас означает загрузка класса C ++ во время выполнения (это, конечно, невозможно в чистом C ++ 11, вам нужна поддержка операционной системы).

Вы можете загрузить динамически связываемый общий объект в системах Posix с помощью dlopen , а затем получить адрес символа в нем с помощью dlsym . Не забудьте объявить extern "C" те функции C ++, которые вы хотите найти.

Если вас интересуют классы C ++, то, возможно, посмотрите также на Qlibrary и QPluginLoader * Q3 для вдохновения.

Подробнее о плагинах .

...