home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 1999 October / PCpro_1999_10.ISO / Tools / vbcrypt / Control / Source / VARIANT.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-13  |  2.2 KB  |  126 lines

  1. #include "stdafx.h"
  2.  
  3. BOOL GetNumber( const VARIANT *v, long *l )
  4. {
  5.   if( !v ) return FALSE;
  6.  
  7.   if( v->vt == (VT_BYREF | VT_VARIANT) )
  8.     v=v->pvarVal;
  9.  
  10.   if( v->vt == (VT_I4 | VT_BYREF) )
  11.   {
  12.     *l = *v->plVal;
  13.     return TRUE;
  14.   }
  15.   if( v->vt == VT_I4 )
  16.   {
  17.     *l = v->lVal;
  18.     return TRUE;
  19.   }
  20.   if( v->vt == (VT_I2|VT_BYREF) )
  21.   {
  22.     *l = *v->piVal;
  23.     return TRUE;
  24.   }
  25.   if( v->vt == VT_I2 )
  26.   {
  27.     *l = v->iVal;
  28.     return TRUE;
  29.   }
  30.   if( v->vt == (VT_UI1|VT_BYREF) )
  31.   {
  32.     *l = *v->pbVal;
  33.     return TRUE;
  34.   }
  35.   if( v->vt == VT_UI1 )
  36.   {
  37.     *l = v->bVal;
  38.     return TRUE;
  39.   }
  40.   return FALSE;
  41. }
  42.  
  43. BOOL GetBOOL( const VARIANT *v, long *l )
  44. {
  45.   if( !v ) return FALSE;
  46.  
  47.   if( v->vt == (VT_BYREF | VT_VARIANT) )
  48.     v=v->pvarVal;
  49.  
  50.   if( !GetNumber( v, l ) )
  51.   {
  52.     if( v->vt == VT_BOOL )
  53.     {
  54.       *l = v->boolVal;
  55.       return TRUE;
  56.     }
  57.     if( v->vt == (VT_BOOL| VT_BYREF) )
  58.     {
  59.       *l = *v->pboolVal;
  60.       return TRUE;
  61.     }
  62.   }
  63.   return FALSE;
  64. }
  65.  
  66. BOOL GetString( const VARIANT *v, BSTR *b )
  67. {
  68.   if( !v ) return FALSE;
  69.  
  70.   if( v->vt == (VT_BYREF | VT_VARIANT) )
  71.     v=v->pvarVal;
  72.  
  73.   if( v->vt == VT_BSTR )
  74.   {
  75.     *b = v->bstrVal;
  76.     return TRUE;
  77.   }
  78.   if( v->vt == (VT_BYREF|VT_BSTR) )
  79.   {
  80.     *b = *v->pbstrVal;
  81.     return TRUE;
  82.   }
  83.   return FALSE;
  84. }
  85.  
  86. BOOL IsError( const VARIANT *v )
  87. {
  88.   if( !v ) return FALSE;
  89.   
  90.   if( v->vt == (VT_BYREF | VT_VARIANT) )
  91.     v=v->pvarVal;
  92.  
  93.   return ( (v->vt == VT_ERROR) || (v->vt == VT_EMPTY) || (v->vt == VT_NULL) );
  94. }
  95.  
  96. BOOL CopyBSTRToCString( BSTR bstr, CString *s )
  97. {
  98.   ULONG l = SysStringLen( bstr );
  99.   LPSTR lpBuffer;
  100.   s->Empty();
  101.   if( l )
  102.   {
  103.     lpBuffer = s->GetBuffer( l );
  104.     if( !lpBuffer )
  105.       return FALSE;
  106.     WideCharToMultiByte( CP_ACP,0, bstr, l, lpBuffer, l, NULL, NULL);
  107.     s->ReleaseBuffer( l );
  108.   }
  109.   return TRUE;
  110. }
  111.  
  112. BOOL LPSTRToCString( CString *dst, LPSTR src, DWORD dwLen )
  113. {
  114.   if( src && dwLen )
  115.   {
  116.     LPSTR lpBuffer = dst->GetBuffer( dwLen );
  117.     if( !lpBuffer ) return FALSE;
  118.     memcpy( lpBuffer, src, dwLen );
  119.     dst->ReleaseBuffer( dwLen );
  120.     return TRUE;
  121.   }
  122.   else
  123.     dst->Empty();
  124.   return FALSE;
  125. }
  126.