У меня есть программа, которая динамически загружает .dll
, и я хочу подключить несколько сигналов этого .dll
с слотами моей программы. Точнее, я хочу вызвать определенную функцию, которая испускает эти сигналы. Однако только несколько из этих сигналов фактически вызывают соответствующие слоты в моей программе. Остальные просто ничего не делают . Но если я посылаю сигнал напрямую, а не через функцию, я упоминал, что подключенные слоты вызываются. Следующий код пытается проиллюстрировать, что я имею в виду:
Настройка соединения
DLLClass * dll_ptr; // pointer to dynamically loaded DLL-class
ProgClass * prog_ptr; // pointer to a class of my program
connect(dll_ptr, &DLLClass::sigA, prog_ptr, &ProgClass::slotA, Qt::DirectConnection);
connect(dll_ptr, &DLLClass::sigB, prog_ptr, &ProgClass::slotB, Qt::DirectConnection);
Определенная функция в .dll
DLLClass::function(){
emit sigA();
emit sigB();
}
код моей программы
dll_ptr->function(); // invokes only slotA
emit dll_ptr->sigA(); // invokes slotA
emit dll_ptr->sigB(); // invokes slotB
Дополнительная информация
Некоторые из этих сигналов / слотов передают аргументы пользовательских типов, которые зарегистрированы через qRegisterMetaType
.
В другой программе, которая также динамически загружает .dll, все работает отлично.
Вопрос
Почему некоторые из излучаемых сигналов в моем function()
вызове не могут вызвать их соответствующий слот, когда прямое излучение работает нормально?