查看完整版本: [-- 在Qt中使用ActiveX控件遇到的问题 --]

QTCN开发网 -> Qt基础编程 -> 在Qt中使用ActiveX控件遇到的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

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

wu_java 2008-11-03 14:42
论坛里有点冷

wu_java 2008-11-07 15:06
看来这是一个比较冷门得问题,不该拿来讨论

ethan0929 2011-07-06 09:21
请加Q594195395一起讨论

不学巫术 2016-09-20 14:11
请问这个问题解决了吗,我也遇到了同样的问题

dkssud622 2017-01-09 13:03
这个问题还没有人解决嘛?烦请高手出售帮下忙。。谢谢

zxwmail 2017-01-15 18:07
acitvex一般用的是变体,这时候就不是数组,需要将变体再解析成数。


查看完整版本: [-- 在Qt中使用ActiveX控件遇到的问题 --] [-- top --]



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