wu_java |
2008-11-03 09:09 |
在Qt中使用ActiveX控件遇到的问题
这里有个ActiveX控件,作用是通过RS232通信的方式读取一个外部设备的数据 在MFC下该控件其中有一个函数是 long ReadDeviceBlock(LPCTSTR szDevice,long lSize,long* lplData); -----------------(1) 参数说明:szDevice 硬件的物理地址名称字符 lSize 要读取的数据长度 lplData 把读取的数据放到lplData数组中 在MFC中使用一切正常,但在Qt4.4.3中使用出现了问题
通过Qt自己提供的工具dumpdoc 查看上面的控件的api如下: int ReadDeviceBlock (QString szDevice, int lSize, int& lplData) [slot] -----------(2) Method ReadDeviceBlock
Connect a signal to this slot:
QObject::connect(sender, SIGNAL(someSignal(QString, int, int&)), object, SLOT(ReadDeviceBlock(QString, int, int&))); Or call the function directly:
QVariantList params = ... int result = object->dynamicCall("ReadDeviceBlock(QString, int, int&)", params).toInt(); 这个(1)式和(2)式有差别,同一个ActiveX控件,api的表达形式出现了变化,为什么?Qt的QAxWidget是怎么使用ActiveX的? Qt下的代码: QAxWidget *axWidget; axWidget = new QAxWidget(QtFirstClass); axWidget->setControl(QString::fromUtf8("{0051af37-a877-11d3-83a8-00a024bdbf2b}")); axWidget->setObjectName(QString::fromUtf8("axWidget")); axWidget->setProperty("geometry", QVariant(QRect(270, 270, 91, 71))); axWidget->setProperty("ActTimeOut", QVariant(5000)); QObject::connect(this, SIGNAL(read(QString, int, int&)), ui.axWidget, SLOT(ReadDeviceBlock(QString, int, int&))); 我用的是信号和槽的方式,在Qt中我的使用方法是 int dataArray[10]; emit read("D500",1,*dataArray); 读取的数据长度为1没有问题,数据能够正常的读取!
int dataArray[10]; emit read("D500",2,*dataArray); 当把数据的长度改为大于1时,编译通过,运行就出错!
在MFC下是没有问题的,它会把读取的数据依次放在数组中 请高手门帮我分析一下,问题出在什么地方? |
|