Взаимодействие с генерируемым средством выполнения DLL в C ++ [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Взаимодействие с генерируемым средством выполнения DLL в C ++ [закрыто]

Сообщение Anonymous »

Я застрял с небольшой (огромной) проблемой в текущем проекте. Я расширяю систему, которая была написана в C ++ и использует широкое использование методов и объектов шаблона. В частности, я пытаюсь реконфигурировать основной компонент системы, используя предоставленный шаблон строителя, по
  • генерирование кода из файла конфигурации во время выполнения
  • Компилирование этого кода в общую библиотеку
  • объединяет, что совместно использует библиотеку (dlopen ()
  • , которая совместила с этой библиотекой (dlopen ()
  • . /> Вызов функции из этой общей библиотеки (dlsym () )
  • Возвращение оттуда
    • Я не могу изменить существующую архитектуру системы, поэтому я должен работать с этим шаблонным строителем. Функции с dlsym () )

    Любые идеи или указатели относительно того, как я мог бы это реализовать? Не обязательно использовать RTTI, только основные ограничения не могут измениться (мне нужно генерировать DLL во время выполнения).
    Я также думал о передаче ссылки на экземпляр Builder из Main () функции в DLL, но проблема в том, что DLL находится в позиции, где я не замечает, что я не смогу о том, что я не сможет, что я не смогу о том, что я не сможет, что я не смогу о том, что я не сможет. Функции, которые являются уникальными для этого состояния (функции, которые необходимы для настройки установленного теперь объекта). < /p>
    Я буду очень благодарен за каждый и любой намек или предложение, которое я могу получить! Добавление всего кода класса застройщиков невозможно, это более 800 строк. Меня не испытывают в шаблонах C ++, но я предполагаю, что это означает, что здесь может быть несколько типов, и все они являются частью финального типа строителя, поскольку они являются частью его Layerstore: < /p>

    Код: Выделить всё

    template 
    class LayerStore {
    
    Это означает, что я даже не могу знать количество типов, которые у меня будут в этом лайсторе в конечном состоянии застройщика, так как я не знаю, сколько слоев будет иметь систему.

    Код: Выделить всё

    auto builder = hqos::builder::Builder()
    .add_shaper_layer(
    2,
    [](auto item_data) {
    rte_pktmbuf_free(static_cast(item_data));
    return true;
    })
    
    .add_scheduler_layer(
    2,
    [](auto item_data) {
    rte_pktmbuf_free(static_cast(item_data));
    return true;
    })
    
    .add_shaper_layer(
    2,
    [](auto item_data) {
    rte_pktmbuf_free(static_cast(item_data));
    return true;
    })
    
    .add_scheduler_layer(
    1,
    [](auto item_data) {
    rte_pktmbuf_free(static_cast(item_data));
    return true;
    })
    
    .add_final_shaper_layer(
    1,
    [](auto item_data) {
    rte_pktmbuf_free(static_cast(item_data));
    return true;
    });
    < /code>
    Это создает новый объект Builder с Mapper по умолчанию, а затем добавляет в него 5 слоев. Параметры функций, добавляющих слои, определяются из файла конфигурации, поэтому их общий счет (этот конкретный пример фактически генерируется моим кодом и записывается в файл DLL).  После добавления окончательного уровня я сейчас нахожусь в построенном  
    State, точнее:

    Код: Выделить всё

    hqos::builder::Builder::Built
    
    Я получаю головные боли исключительно от просмотра этого типа, но, как вы можете видеть, это не предсказуемо.

    Подробнее здесь: https://stackoverflow.com/questions/797 ... d-dll-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»