读取所用用户信息的代码:
QVariant dwMachineNumber(1);
QVariant dwEnrollNumber("");
QVariant Name("");
QVariant Password("");
QVariant Privilege(0);
QVariant Enabled(false);
QList<QVariant> inplist;
inplist << dwMachineNumber << dwEnrollNumber << Name << Password << Privilege << Enabled ; //要获取组件执行后传人参数的值 需将参数放入QList<QVariant>
QAxObject *zk = new QAxObject(this);
zk->setControl("zkemkeeper.ZKEM.1");//连接中控控件
QVariant connStatus=zk->dynamicCall("Connect_Net(string, int)","192.168.10.242",4370); //连接考勤机
if(connStatus.toBool()){
connStatus = zk->dynamicCall("ReadAllUserID(int)",1); //读取用户信息
QVariant readed = zk->dynamicCall("SSR_GetAllUserInfo(long, QString&, QString&, QString&, int&, bool&)",inplist);
while(readed.toBool()){
readed = zk->dynamicCall("SSR_GetAllUserInfo(long, QString&,QString&, QString&, int&, bool&)",inplist);
qDebug() << "inplist=" << inplist;
}
zk->dynamicCall("Disconnect()"); //关闭连接
}
qDebug() << "connStatus:" << connStatus;
delete zk;
zk=NULL;
要点:在Qt中用 dynamicCall 调用COM组件函数 ,COM组件函数的参数为指针变量时 ,若想获取COM组件函数执行后传人的指针参数的值,需将参数保存在一个 QList<QVariant> 中后传入,例如COM组件中的SSR_GetAllUserInfo函数的定义为:
VARIANT_BOOL SSR_GetAllUserInfo( [in] LONG dwMachineNumber, [out] BSTR* dwEnrollNumber, [out] BSTR* Name, [out] BSTR* Password, [out] LONG* Privilege, [out] VARIANT_BOOL* Enabled)
想要在Qt中获取:
dwMachineNumber
机器号
dwEnrollNumber
用户号
Name
用户姓名
Password
用户密码
Privilege
用户权限,3 为管理员,0 为普通用户
Enabled
用户启用标志,1 为启用,0 为禁用
则实现方式需写成上面的形式。