查看完整版本: [-- Qt生成的dll使用(求助) --]

QTCN开发网 -> Qt基础编程 -> Qt生成的dll使用(求助) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

winston_zbb 2020-10-14 22:10

Qt生成的dll使用(求助)

由于项目需要,先需要使用qt生成dll文件,供C#调用,目前在使用connect中遇见问题! 我的程序在qt上运行时,按照设计的想法,执行了槽函数。但是在C#调用qt生成的dll文件时,并没有执行槽函数,不知道是没有触发,还是没有connect成功,有遇见这种情况的么?该如何解决这个问题!

lanmanck 2020-10-15 09:26
上代码,connect有返回值

272064949 2020-10-15 09:42
其他功能没有问题的话, 有没有可能是qt的事件没有开启, 就是qt的main里的a.exec(), 因为你是用c#调用dll, 所以没有这几行代码。如果没有跨线程的话, 试试用c++11的方式使用看行不行,
connect(obj, &ojb::sig, [=](){
});

winston_zbb 2020-10-15 11:12
272064949:
其他功能没有问题的话, 有没有可能是qt的事件没有开启, 就是qt的main里的a.exec(), 因为你是用c#调用dll, 所以没有这几行代码。如果没有跨线程的话, 试试用c++11的方式使用看行不行,
connect(obj, &ojb::sig, [=](){
});


我定义了一个类,类里面有一个connect ,具体如下:
.h
class testTimer : public QObject
{
    Q_OBJECT
public:
    explicit testTimer(QObject* parent = nullptr);
    QTimer *testtimer = new QTimer();
    int value1 = 0;
private slots:
    void calTest();
};

.cpp
testTimer::testTimer(QObject *parent) : QObject(parent)
{
    connect(testtimer,&QTimer::timeout,[=]()    {        value1= value1+1;    });  
    testtimer->start(1000);
}
void testTimer::calTest()
{
    value1 = value1+1;
}
我使用了两种方法调用 方法一 : 我生成dll文件中调用
testTimer *test11 = new testTimer();
extern "C" __declspec(dllexport)
int connect1();int connect1()
{    //qApp->exec();  
     return test11->value1;
   //return currentcon->on_connect();
}
方法二 我使用了别人做的使C#调用的界面类
testTimer *currenttest = new testTimer();
ui->doubleSpinBox->setValue(currenttest->value1);
结果是 第一种方法 结果一直为0,第二种方法 结果与预期符合,一直在变化
[attachment=21966][attachment=21965][attachment=21964][attachment=21967]


winston_zbb 2020-10-15 14:42
lanmanck:上代码,connect有返回值 (2020-10-15 09:26) 

您看一下我的含有代码的回复,我在界面类中调用成功,但是我直接使用类,就失败,不知道什么原因

圣域天子 2020-10-18 13:05
Qt也需要先启动消息循环才能用信号槽,其它语言调用Qt的DLL时,一般是不能用信号槽的。
除非先实例化QXXXXXApplication

winston_zbb 2020-10-19 08:11
圣域天子:Qt也需要先启动消息循环才能用信号槽,其它语言调用Qt的DLL时,一般是不能用信号槽的。
除非先实例化QXXXXXApplication  (2020-10-18 13:05) 

您好,我想使用QSerialPort这个类,实现接收串口数据,不用信号和槽,有没有比较好的方法。如果我只定义了一个类,如何对类进行实例化

圣域天子 2020-10-19 13:26
winston_zbb:您好,我想使用QSerialPort这个类,实现接收串口数据,不用信号和槽,有没有比较好的方法。如果我只定义了一个类,如何对类进行实例化 (2020-10-19 08:11) 

主动读写,我以往是用个子线程进行处理的

winston_zbb 2020-10-19 15:15
圣域天子:主动读写,我以往是用个子线程进行处理的 (2020-10-19 13:26) 

好的,多谢!还想请教您一下,您在实际使用过程中,除了信号和槽不能使用,其它的功能有没有不能使用的!?

圣域天子 2020-10-19 16:04
winston_zbb:好的,多谢!还想请教您一下,您在实际使用过程中,除了信号和槽不能使用,其它的功能有没有不能使用的!? (2020-10-19 15:15) 

发现过某些函数偶尔会不工作,比如 select() 函数,原因不明。
一下子想不起来多少,原来发现过超过10条
注意有些内部使用信号槽的类都不能使用的


查看完整版本: [-- Qt生成的dll使用(求助) --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled