【发布时间】:2014-04-09 22:38:14
【问题描述】:
我正在将 T-Cube 电机控制器 (http://www.thorlabs.de/newgrouppage9.cfm?objectgroup_id=2419) 集成到基于 Qt-4.8.1 包的软件中。由于没有手册或任何类型的教程如何检索 ActiveX 对象以及如何调用方法,我做了以下操作。
1) 通过 Windows 注册表查找与电机控制器名称相似的词。找到一个 CLSID 为“{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}”的候选人。
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) generateDocumentation() 方法完美描述了大约 150 种方法。
4) 所有 dynamicCall() 调用都会导致“错误调用...:未知错误”,其中“...”是 generateDocumentation() 给我的列表中 dynamicCall() 的第一个参数。
5) 如果我在 dynamicCall() 中插入未在生成的文档中提供的任何方法,则输出会有所不同。所以我认为生成的文档中的方法确实存在。
6) 如果我使用#import 指令并尝试直接调用以避免使用 QAxObject,我会看到“mg17motor.tlh”文件,但其中描述的接口均不包含任何方法。所以我也不能直接使用它。正常吗?
我非常乐意提供任何建议。
【问题讨论】: