home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / ole / tstcon / varutils.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-27  |  2.8 KB  |  154 lines

  1. #include "StdAfx.H"
  2. #include "TestCon.H"
  3.  
  4. #ifdef _DEBUG
  5. #define new DEBUG_NEW
  6. #undef THIS_FILE
  7. static char THIS_FILE[] = __FILE__;
  8. #endif
  9.  
  10. class INVOKEKIND_ENTRY
  11. {
  12. public:
  13.    LPCTSTR pszName;
  14.    INVOKEKIND invokekind;
  15. };
  16.  
  17. static INVOKEKIND_ENTRY g_aInvokeKinds[] =
  18. {
  19.    { _T( "Method" ), INVOKE_FUNC },
  20.    { _T( "PropGet" ), INVOKE_PROPERTYGET },
  21.    { _T( "PropPut" ), INVOKE_PROPERTYPUT },
  22.    { _T( "PropPutRef" ), INVOKE_PROPERTYPUTREF }
  23. };
  24.  
  25. const int NUM_INVOKEKINDS = sizeof( g_aInvokeKinds )/sizeof(
  26.    g_aInvokeKinds[0] );
  27.  
  28. LPCTSTR InvokeKindToString( INVOKEKIND invokekind )
  29. {
  30.    int iInvokeKind;
  31.  
  32.    for( iInvokeKind = 0; iInvokeKind < NUM_INVOKEKINDS; iInvokeKind++ )
  33.    {
  34.       if( g_aInvokeKinds[iInvokeKind].invokekind == invokekind )
  35.       {
  36.          return( g_aInvokeKinds[iInvokeKind].pszName );
  37.       }
  38.    }
  39.  
  40.    return( NULL );
  41. }
  42.  
  43. class VARTYPE_ENTRY
  44. {
  45. public:
  46.    LPCTSTR pszName;
  47.    VARTYPE vt;
  48. };
  49.  
  50. static VARTYPE_ENTRY g_aVarTypes[] =
  51. {
  52.    { _T( "VT_EMPTY" ), VT_EMPTY },
  53.    { _T( "VT_BOOL" ), VT_BOOL },
  54.    { _T( "VT_UI1" ), VT_UI1 },
  55.    { _T( "VT_UI2" ), VT_UI2 },
  56.    { _T( "VT_UI4" ), VT_UI4 },
  57.    { _T( "VT_UI8" ), VT_UI8 },
  58.    { _T( "VT_I1" ), VT_I1 },
  59.    { _T( "VT_I2" ), VT_I2 },
  60.    { _T( "VT_I4" ), VT_I4 },
  61.    { _T( "VT_I8" ), VT_I8 },
  62.    { _T( "VT_R4" ), VT_R4 },
  63.    { _T( "VT_R8" ), VT_R8 },
  64.    { _T( "VT_BSTR" ), VT_BSTR },
  65.    { _T( "VT_CY" ), VT_CY },
  66.    { _T( "VT_DATE" ), VT_DATE },
  67.    { _T( "VT_ERROR" ), VT_ERROR },
  68.    { _T( "VT_COLOR" ), VT_COLOR },
  69.    { _T( "VT_FONT" ), VT_FONT },
  70.    { _T( "VT_UNKNOWN" ), VT_UNKNOWN }
  71. };
  72.  
  73. LPCTSTR VTIToString( int iType )
  74. {
  75.    return( g_aVarTypes[iType].pszName );
  76. }
  77.  
  78. VARTYPE VTIToVT( int iType )
  79. {
  80.    return( g_aVarTypes[iType].vt );
  81. }
  82.  
  83. LPCTSTR VTToString( VARTYPE vt )
  84. {
  85.    int iType;
  86.  
  87.    for( iType = 0; iType < NUM_VARTYPES; iType++ )
  88.    {
  89.       if( g_aVarTypes[iType].vt == vt )
  90.       {
  91.          return( g_aVarTypes[iType].pszName );
  92.       }
  93.    }
  94.  
  95.    return( NULL );
  96. }
  97.  
  98. int VTToVTI( VARTYPE vt )
  99. {
  100.    int iType;
  101.  
  102.    for( iType = 0; iType < NUM_VARTYPES; iType++ )
  103.    {
  104.       if( g_aVarTypes[iType].vt == vt )
  105.       {
  106.          return( iType );
  107.       }
  108.    }
  109.  
  110.    return( -1 );
  111. }
  112.  
  113. CString VariantToString( const VARIANT& var )
  114. {
  115.    USES_CONVERSION;
  116.    CString strResult;
  117.    COleVariant varString;
  118.    BOOL tHandled;
  119.  
  120.    tHandled = FALSE;
  121.    switch( var.vt )
  122.    {
  123.    case VT_BOOL:
  124.       if( var.boolVal == VARIANT_FALSE )
  125.       {
  126.          strResult = _T( "FALSE" );
  127.       }
  128.       else
  129.       {
  130.          strResult = _T( "TRUE" );
  131.       }
  132.       tHandled = TRUE;
  133.       break;
  134.    }
  135.  
  136.    if( !tHandled )
  137.    {
  138.       varString = var;
  139.       TRY
  140.       {
  141.          varString.ChangeType( VT_BSTR );
  142.       }
  143.       CATCH( COleException, e )
  144.       {
  145.          TRACE( "ChangeType() failed.\n" );
  146.       }
  147.       END_CATCH
  148.  
  149.       strResult = varString.bstrVal;
  150.    }
  151.  
  152.    return( strResult );
  153. }
  154.