> Во всех статьях Microsoft строго наказано, да и просто в > форумах, практически все используют ::VariantInit для любых > типов данных, инкапсулируемых в VARIANT. > Но вот вопрос ... почему бы не обойтись в простых случаях > без этого вызова, когда передаютсяпростыеданные, > например, типа long, int и т.д? > > Например, у COM интерфейса есть некий метод get_Item ( > VARIANT index /* long */, ... ). > > Почему бы не поставить // коментарий в коде: > > for ( int i = 0; i < cItems; i ++ ) > { > VARIANT varIndex; > //::VariantInit( &varIndex ); > > varIndex.vt = VT_I4; > varIndex.lVal = long ( i ); > > HRESULT hr =pISomeInterface->get_Item( varIndex, > &Ifld ) ; > > <skip> > } > > > Спаcибо.
Никто не мешает но во избежании недоразумений перед инициализацией полей
не мешает сделать FillMemory(&varIndex, sizeof(varIndex), 0).
Во всех статьях Microsoft строго наказано, да и просто в форумах, практически все используют ::VariantInit для любых типов данных, инкапсулируемых в VARIANT.
Но вот вопрос ... почему бы не обойтись в простых случаях без этого вызова, когда передаютсяпростыеданные, например, типа long, int и т.д?
Например, у COM интерфейса есть некий метод get_Item ( VARIANT index /* long */, ... ).
Почему бы не поставить // коментарий в коде:
for ( int i = 0; i < cItems; i ++ )
{
VARIANT varIndex;
//::VariantInit( &varIndex );
> Во всех статьях Microsoft строго наказано, да и просто в > форумах, практически все используют ::VariantInit для любых > типов данных, инкапсулируемых в VARIANT. > Но вот вопрос ... почему бы не обойтись в простых случаях > без этого вызова, когда передаютсяпростыеданные, > например, типа long, int и т.д? > > Например, у COM интерфейса есть некий метод get_Item ( > VARIANT index /* long */, ... ). > > Почему бы не поставить // коментарий в коде: > > for ( int i = 0; i < cItems; i ++ ) > { > VARIANT varIndex; > //::VariantInit( &varIndex ); > > varIndex.vt = VT_I4; > varIndex.lVal = long ( i ); > > HRESULT hr =pISomeInterface->get_Item( varIndex, > &Ifld ) ; > > <skip> > } > > > Спаcибо.
Никто не мешает но во избежании недоразумений перед инициализацией полей
не мешает сделать FillMemory(&varIndex, sizeof(varIndex), 0).
Спасибо за мнение.31.10.05 22:24 Автор: void <Grebnev Valery> Статус: Elderman
> не мешает сделать FillMemory(&varIndex, > sizeof(varIndex), 0).
Думаю, для обсуждаемого случая можно и не делать. В вызове аналогичному тому, что выше, а именно типа:
for ( int i = 0; i < cItems; i ++ )
{
HRESULT hr =pISomeInterface->get_Item( CComVariant ( long (i) ), &Ifld ) ;
<skip>
}
В конструкторе CComVariant ( long (i) ) не будет зваться ни ::VariantInit, ни FillMemory ....