这里有个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下是没有问题的,它会把读取的数据依次放在数组中
请高手门帮我分析一下,问题出在什么地方?