Last Updated 2005/09/08
Programming Tips Visual C++ MFC 他のコントロール  索 引 
COleVariant(バリアント型)
2005/09/08

COleVariant のメンバ変数 vt にデータ型が格納されている.
VT_I4 ならば vt.lVal の値,VT_I2 だったら vt.iVal の値という感じである.
しかしそれを参照しようとすると switch だらけのコーディングになってしまう.

COleVariant を TRACE() などに渡す場合は,コピー後 ChangeType() にて VT_BSTR に変換して OLE2CT マクロで LPCTSTR に変換するのがよい.
(COleVariant がその場だけのものであればそのまま ChangeType() してもよい)

#include 

    while( !RS->IsEOF() ) {
        USES_CONVERSION;
        COleVariant var;
        var = RS->GetFieldValue(0);
        var->ChangeType( VT_BSTR );
        _tprintf(_T("%s"), OLE2CT(V_BSTR(&var)));
        var = RS->GetFieldValue(1);
        _tprintf(_T("%s\n"), OLE2CT(V_BSTR(&var)));
        RS->MoveNext();
   }


また,VariantChangeType() や OLE2T() も存在する.


#include 

VARIANT    a;
char       b[32];

USES_CONVERSION; // OLE2T() を使うためのおまじない

VariantChangeType(&a, &a, 0, VT_BSTR);
_tcscpy(b, OLE2T(a.bstrVal));




コンパイラの COM サポートを使ってもよければ

#include 

VARIANT    a;
char       b[32];
_variant_t v = a;

_tcscpy (b, LPCTSTR(_bstr_t(a)));


参照
前後のTips
COleVariant(バリアント型)

DSS ProgrammingTipsCGI Ver2.01