1、Qt ActiveX Server项目创建后默认只会导出一个类。而我现在有一个主界面类baslerMatchModel,一个显示和绘制图像的窗口类QVisionWidget。若按照默认创建ActiveX控件后只会导出主界面类的方法,而另一个窗口类的方法就没有导出,导致不能响应相应的槽函数。若导出两个类,曾尝试在主界面类和窗口类的声明中都用Q_CLASSINFO来定义其ClassID、InterfaceID、EventsID,使用QAXFACTORY_BEGIN()和QAXFACTORY_END()来引用。
窗口类QVisionWidget的ClassID、InterfaceID、EventsID皆为自己编写的,没有找到像ATL项目那样可以添加控件的,所以自己编写。
编译后报错:
问题:不知如此导出两个类的操作是否合法,若不合法,不知如何才能让窗口类也可以响应信号槽。
2、RS232串口读写操作:在c++项目中实现一样的代码,上位机是可以正常发送指令和监听接收到下位机的应答指令;但是,创建ATL项目后,把代码移植过去,生成DLL后,用HTML调用其接口函数发送指令,无论是否发送成功,程序都会报接收不到下位机应答的错误,即使是等候10秒依然是接收不到。而在C++项目中运行时并不会发生这种情况。
ATL项目详细如下:(函数体与建C++测试工程时是一样的)把打开串口函数openCom,关闭串口函数close,发送指令函数send和获取错误码函数error导出为接口函数,如下图:
线程函数则是全局函数,在打开串口后就会被创建,如图:
在关闭串口函数中判断是否线程接收到下位机应答:
获取错误码的接口函数:
使用HTML调用其函数,实现上位机给下位机发送指令,会报“no receive, time out!”的错误信息: