读取所用用户信息的代码:
QVariant dwMachineNumber(1); QVariant dwEnrollNumber(""); QVariant Name(""); QVariant Password(""); QVariant Privilege(0); QVariant Enabled(false); QListinplist; inplist << dwMachineNumber << dwEnrollNumber << Name << Password << Privilege << Enabled ; //要获取组件执行后传人参数的值 需将参数放入QList 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 为禁用
则实现方式需写成上面的形式。