Qt信号/插槽的怪异行为(涉及动态加载的DLL)

时间:2019-01-08 13:50:59

标签: c++ qt dll qt5

我有一个程序动态加载了 .dll ,并且我想连接该 { {1}} 和我程序的插槽。更确切地说,我想调用某个发出这些信号的函数。但是,这些信号中的只有少数实际上正在调用我程序中相应的插槽。其他人什么也不做。但是,如果我直接发出信号而不是通过函数发出信号,我会提到连接的插槽被调用。以下代码试图说明我的意思:

连接设置

.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);

我的程序代码

DLLClass::function(){
    emit sigA();
    emit sigB();
}

其他信息

其中一些信号/插槽传递通过dll_ptr->function(); // invokes only slotA emit dll_ptr->sigA(); // invokes slotA emit dll_ptr->sigB(); // invokes slotB 注册的自定义类型的参数。 在另一个还动态加载.dll的程序中,一切正常。

问题

当直接发射工作正常时,为什么我的qRegisterMetaType调用中的某些发射信号无法调用其相应的插槽?

0 个答案:

没有答案