c++builder如何使用OCX控件中的tagVARIANT*参数
老小笨鸟 2011-07-28 02:21:18 我最近在搞一个机器,提供一个OCX控件,安装后,打开正常,但在执行GetEnrollData接口函数时总是返回错误,代码贴出,请大拿帮忙看看:
void __fastcall TFormTestFingEnroll::cmdGetEnrollDataClick(TObject *Sender)
{
int vEnrollNumber,vEMachineNumber,vFingerNumber,vPrivilege,vErrorCode,i;
int iLen;
bool vRet;
tagVARIANT va;
VARIANT VA;
OleVariant oa;
lstEnrollData->Lines->Clear();
Label2->Caption = "";
lblMessage->Caption = "Working...";
vRet = FormTestFingM->FP_CLOCK1->EnableDevice(mMachineNumber, false);
if(!vRet)
{
lblMessage->Caption = gstrNoDevice;
return;
}
vEnrollNumber = txtEnrollNumber->Text.ToInt();
vFingerNumber = cmbBackupNumber->Text.ToInt();
vEMachineNumber = cmbEMachineNumber->Text.ToInt();
vRet = FormTestFingM->FP_CLOCK1->GetEnrollData(mMachineNumber,
vEnrollNumber,
vEMachineNumber,
vFingerNumber,
(long*)&vPrivilege,
oa,
(long*)&glngEnrollPData);
if(vRet)
{
cmbPrivilege->ItemIndex = vPrivilege;
lblMessage->Caption = "GetEnrollData OK";
if(vFingerNumber == 10)
lstEnrollData->Lines->Add((String(glngEnrollPData)));
else if(vFingerNumber==11)
{
txtCardNumber->Text = String(glngEnrollPData);
lstEnrollData->Lines->Add(String(glngEnrollPData));
}
else
{
//for(i = 0;i<DATASIZE - 1;i++)
//{
// lstEnrollData->Lines->Add(String((long*)glngEnrollData[i]));
//}
lstEnrollData->Lines->Add(String(glngEnrollData));
}
}
else
{
lstEnrollData->Lines->Add("oa.ArrayDimCount()"+IntToStr(oa.ArrayDimCount()));
for(i = 0;i<DATASIZE - 1;i++)
{
//lstEnrollData->Lines->Add(String(oa[i]);
}
FormTestFingM->FP_CLOCK1->GetLastError((long *)&vErrorCode);
lblMessage->Caption = ErrorPrint(vErrorCode);
lstEnrollData->Lines->Add("执行错误: GetEnrollData! ");
}
FormTestFingM->FP_CLOCK1->EnableDevice(mMachineNumber, true);
}
不管放VARIANT,OLEVARIANT,执行GetEnrollData都返回false,在VB下、DELPHI下都可以。DELPHI下用OLEVARIANT就可以。百思不得其解。