Qt ActiveX "Unknown error"



我正在努力将T-Cube Motor Controller(http://www.thorlabs.de/newgrouppage9.cfm?objectgroup_id = 2419)集成(http://www.thorlabs.de/newgroupage9.cfm = 2419)。1包。由于没有手册或任何类型的教程如何检索ActiveX对象以及如何调用我执行以下操作的方法。

1)通过Windows注册表查看类似于电动机控制器名称的单词。找到了具有CLSID的候选人" {3CE35BF3-1E13-4D2C-8C0B-DEF631420B3}"。

2)尝试以以下方式初始化它(缩短了提供的代码,所有结果检查均已删除以提高可读性):

HRESULT h_result = CoInitializeEx(NULL, COINIT_MULTITHREADED);
pd->moto = new QAxObject();
initialized = moto->setControl( "{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}" );
QString stri = browser->generateDocumentation();
obj->dynamicCall("SetHWSerialNum(int)", params);
QVariantList params;
params << 0;
params << 0.0;
int result = pd->moto->dynamicCall("GetPosition(int, double&)", params).toInt();
value = params[1].toFloat();

QVariantList params;
params << 0;
params << dist;
params << dist;
params << true;
int result = pd->moto->dynamicCall("MoveRelativeEx(int, double, double, bool)", params).toInt();

3)生成的文章()方法给出了〜150方法的完美描述。

4)所有dynamicCall()调用导致"错误调用...:未知错误",其中" ..."是从列表生成coditatedOcumentation()给予我的dynamicCall()的第一个参数。

5)如果我插入DynamicCall()(文档生成的输出中未显示的任何方法)是不同的。因此,我想生成的文档中的方法确实存在。

6)如果我使用#IMPORT指令并尝试直接调用QaxObject用法,我会看到" mg17motor.tlh"文件,但是那里描述的任何接口都不包含任何方法。因此,我也不能直接使用它。是正常的吗?

我将非常有义务任何建议。

您可以使用OLE查看器找到ActiveX对象。然后搜索类似 APT..MG.. all objects。然后找到参数ProgID=MGMOTOR.MGMotorCtrl.1

现在在QT中不要使用QAxObject,而是QAxWidget。然后,您会得到类似的东西:

QAxWidget* aptMotor;
QVariant chanID = QVariant(0);
aptMotor = new QAxWidget();
aptMotor->setControl("MGMOTOR.MGMotorCtrl.1");
//Nice html documentation on available functions
QFile file("out.html");
file.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out(&file);
out << aptMotor->generateDocumentation();
file.close();
aptMotor->setProperty("HWSerialNum",QVariant(83853493));
aptMotor->dynamicCall("StartCtrl");
aptMotor->dynamicCall("EnableHWChannel(QVariant)",chanID);
QThread::sleep(1); // Give it time to enable the channel
double pos(0);
aptMotor->dynamicCall("SetAbsMovePos(QVariant,QVariant)",chanID,QVariant(pos));
aptMotor->dynamicCall("MoveAbsolute(QVariant,QVariant,QVariant)",chanID,0);
aptMotor->dynamicCall("StopCtrl");

相关内容

最新更新