• 12882阅读
  • 6回复

在Qt中使用ActiveX控件遇到的问题 [复制链接]

上一主题 下一主题
离线wu_java
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-03
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
这里有个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
只看该作者 1楼 发表于: 2008-11-03
论坛里有点冷
离线wu_java
只看该作者 2楼 发表于: 2008-11-07
看来这是一个比较冷门得问题,不该拿来讨论
离线ethan0929

只看该作者 3楼 发表于: 2011-07-06
请加Q594195395一起讨论
离线不学巫术

只看该作者 4楼 发表于: 2016-09-20
请问这个问题解决了吗,我也遇到了同样的问题
离线dkssud622

只看该作者 5楼 发表于: 2017-01-09
这个问题还没有人解决嘛?烦请高手出售帮下忙。。谢谢
离线zxwmail

只看该作者 6楼 发表于: 2017-01-15
acitvex一般用的是变体,这时候就不是数组,需要将变体再解析成数。
快速回复
限100 字节
 
上一个 下一个