home *** CD-ROM | disk | FTP | other *** search
- #include "stdafx.h"
-
- BOOL GetNumber( const VARIANT *v, long *l )
- {
- if( !v ) return FALSE;
-
- if( v->vt == (VT_BYREF | VT_VARIANT) )
- v=v->pvarVal;
-
- if( v->vt == (VT_I4 | VT_BYREF) )
- {
- *l = *v->plVal;
- return TRUE;
- }
- if( v->vt == VT_I4 )
- {
- *l = v->lVal;
- return TRUE;
- }
- if( v->vt == (VT_I2|VT_BYREF) )
- {
- *l = *v->piVal;
- return TRUE;
- }
- if( v->vt == VT_I2 )
- {
- *l = v->iVal;
- return TRUE;
- }
- if( v->vt == (VT_UI1|VT_BYREF) )
- {
- *l = *v->pbVal;
- return TRUE;
- }
- if( v->vt == VT_UI1 )
- {
- *l = v->bVal;
- return TRUE;
- }
- return FALSE;
- }
-
- BOOL GetBOOL( const VARIANT *v, long *l )
- {
- if( !v ) return FALSE;
-
- if( v->vt == (VT_BYREF | VT_VARIANT) )
- v=v->pvarVal;
-
- if( !GetNumber( v, l ) )
- {
- if( v->vt == VT_BOOL )
- {
- *l = v->boolVal;
- return TRUE;
- }
- if( v->vt == (VT_BOOL| VT_BYREF) )
- {
- *l = *v->pboolVal;
- return TRUE;
- }
- }
- return FALSE;
- }
-
- BOOL GetString( const VARIANT *v, BSTR *b )
- {
- if( !v ) return FALSE;
-
- if( v->vt == (VT_BYREF | VT_VARIANT) )
- v=v->pvarVal;
-
- if( v->vt == VT_BSTR )
- {
- *b = v->bstrVal;
- return TRUE;
- }
- if( v->vt == (VT_BYREF|VT_BSTR) )
- {
- *b = *v->pbstrVal;
- return TRUE;
- }
- return FALSE;
- }
-
- BOOL IsError( const VARIANT *v )
- {
- if( !v ) return FALSE;
-
- if( v->vt == (VT_BYREF | VT_VARIANT) )
- v=v->pvarVal;
-
- return ( (v->vt == VT_ERROR) || (v->vt == VT_EMPTY) || (v->vt == VT_NULL) );
- }
-
- BOOL CopyBSTRToCString( BSTR bstr, CString *s )
- {
- ULONG l = SysStringLen( bstr );
- LPSTR lpBuffer;
- s->Empty();
- if( l )
- {
- lpBuffer = s->GetBuffer( l );
- if( !lpBuffer )
- return FALSE;
- WideCharToMultiByte( CP_ACP,0, bstr, l, lpBuffer, l, NULL, NULL);
- s->ReleaseBuffer( l );
- }
- return TRUE;
- }
-
- BOOL LPSTRToCString( CString *dst, LPSTR src, DWORD dwLen )
- {
- if( src && dwLen )
- {
- LPSTR lpBuffer = dst->GetBuffer( dwLen );
- if( !lpBuffer ) return FALSE;
- memcpy( lpBuffer, src, dwLen );
- dst->ReleaseBuffer( dwLen );
- return TRUE;
- }
- else
- dst->Empty();
- return FALSE;
- }
-