今天在使用vector<VARIANT>结构存储的时候,发现push_back时的数据没有问题,但是通过下标或迭代器取出来的时候出现了数据不匹配的情况。具体原因还待研究。
由于时间的关系,我换了一种方式,用vector<VARIANT *>结构存储,具体过程如下。
VARIANT * pVal;
pVal = (VARIANT *)CoTaskMemAlloc(sizeof(VARIANT));
VariantInit(pVal);
hr = pclsObj->Get(vec_parameter[i], 0, pVal, 0, 0);
vec_result.push_back(pVal); //放入vector<VARIANT *>中
//取出数据,并释放资源
VARIANT *temp2 = (VARIANT *)CoTaskMemAlloc(sizeof(VARIANT));
VariantInit(temp2); //将temp2设置为VT_EMPTY
void *temp3 = temp2;
for (i_variant = vec_result_from_wmi.begin(); i_variant != vec_result_from_wmi.end(); i_variant++)
{
temp2= *i_variant;
}
for (i_variant = vec_result_from_wmi.begin(); i_variant != vec_result_from_wmi.end(); i_variant++)
{
VariantClear(*i_variant);
CoTaskMemFree(*i_variant);
}
VariantClear((VARIANT *)temp3);
CoTaskMemFree((VARIANT *)temp3);
(转)通过CComVariant使用VARIANT变量
CComVariant 是 ATL 对于 VARIANT 的简单包装。通过 CComVariant 可以更简单的使用 VARIANT ,而不必担心没有进行初始化或清除。如果没有特殊情况,应该尽量使用 CComVariant 而不要使用 VARIANT 。
以下是使用 CComVariant 的代码实例。
CComVariant Val;
Val.vt = VT_I4;
Val.lVal = 10;
// Val 不必清除
以下是使用 CComVariant 数组的例子。
CComVariant * pVal;
pVal = new CComVariant[10];
for (int i = 0; i < 10; ++i)
{
pVal[i].vt = VT_I4;
pVal[I].lVal = i + 1;
}
...
delete[] pVal;