25. januar 2000 - 13:30
Der er
1 kommentar og
1 løsning
VARIANT
for (int i = 0; i < 6 ; i++){
if (pVar->vt != VT_NULL){
hr = VariantChangeType(&varCopy, pVar, 0, VT_BSTR);
if (FAILED(hr)){
MsgError(_T("Could not convert field %d to string"), i);
}
else
{
switch (i)
{
case 0:
lstrcpy (lvdatabase.szCompany, varCopy.bstrVal);
case 1:
lstrcpy (lvdatabase.szContact, varCopy.bstrVal);
case 2:
lstrcpy (lvdatabase.szAdress, varCopy.bstrVal);
}
VariantClear(&varCopy);
}
}
++pVar;
}
Jeg har ovenstående kode der virker, men vil gerne kunne henter værdierne i vilkårlig rækkefølge uden at skulle bruge for-løkken. Altså noget i retning af pVar[i].(pVar er af typen VARIANT*, varCopy er af VARIANT.
25. januar 2000 - 14:05
#1
Jeg har lige haft et problem af samme type -- vejen for mig var at lave en hash funktion til 'pVar' (Jeg går ud fra at din pVar ikke er sorteret/indekseret?).
Men hvis du finder en mere simpel løsning er jeg temmelig interesseret :)
25. januar 2000 - 14:18
#2
Jeg forstår udemærket hvad du mener. Dette her burde vel strengt taget virke:
hr = VariantChangeType(&varCopy, pVar+i, 0, VT_BSTR);
if (FAILED(hr)){
MsgError(_T("Could not convert field %d to string"), i);
else
lstrcpy (<modtagerfelt>, varCopy.bstrVal);
hvor du så selvfølgelig skifter <modtagerfelt> ud med den ønskede variabel. Du må også kunne lave den første del om til en funktion:
bool GetValueAsString(VARIANT* pVar, int i, LPTSTR retVal)
{
VARIANT varCopy;
hr = VariantChangeType(&varCopy, pVar+i, 0, VT_BSTR);
if (FAILED(hr))
{
MsgError(_T("Could not convert field %d to string"), i);
return false;
}
lstrcpy(retValue, varCopy.bstrVal);
return true;
}
og så blot kalde den:
GetValueAsString(pVar, 0, lvdatabase.szCompany);
GetValueAsString(pVar, 2, lvdatabase.szAdress);
GetValueAsString(pVar, 1, lvdatabase.szContact);