// Guid.cpp: implementation of the CGuid class.
|
//
|
//////////////////////////////////////////////////////////////////////
|
|
#include "stdafx.h"
|
#include "Guid.h"
|
|
#ifdef _DEBUG
|
#undef THIS_FILE
|
static char THIS_FILE[]=__FILE__;
|
#define new DEBUG_NEW
|
#endif
|
|
//////////////////////////////////////////////////////////////////////
|
// Construction/Destruction
|
//////////////////////////////////////////////////////////////////////
|
|
CGuid::CGuid()
|
:m_status(null)
|
{
|
memset( &m_guid, 0, sizeof(GUID) );
|
}
|
|
CGuid::CGuid( const CGuid& ref )
|
{
|
memcpy( &m_guid, &ref.m_guid, sizeof(GUID) );
|
m_status = ref.m_status;
|
}
|
|
CGuid::CGuid( const GUID &guid )
|
{
|
memcpy( &m_guid, &guid, sizeof(GUID) );
|
m_status = valid;
|
}
|
|
CGuid::CGuid( const CString strSrc )
|
{
|
BSTR bszSrc;
|
CString strGuid;
|
|
if (strSrc.GetLength( ) == 36)
|
{
|
strGuid = _T("{") + strSrc + _T("}");
|
bszSrc = strGuid.AllocSysString();
|
}
|
else
|
bszSrc = strSrc.AllocSysString();
|
|
if (CLSIDFromString( bszSrc, &m_guid ) != S_OK )
|
m_status = invalid;
|
else
|
m_status = valid;
|
SysFreeString( bszSrc );
|
}
|
|
CGuid::CGuid( LPCWSTR lpszSrc )
|
{
|
if (CLSIDFromString( (LPWSTR)lpszSrc, &m_guid ) != S_OK )
|
m_status = invalid;
|
else
|
m_status = valid;
|
}
|
|
const CGuid& CGuid::operator=(const CGuid& guidSrc)
|
{
|
memcpy( &m_guid, &guidSrc.m_guid, sizeof(GUID) );
|
m_status = guidSrc.m_status;
|
return *this;
|
}
|
|
const CGuid& CGuid::operator=(const GUID& guidSrc)
|
{
|
memcpy( &m_guid, &guidSrc, sizeof(GUID) );
|
m_status = valid;
|
return *this;
|
}
|
|
const CGuid& CGuid::operator=(const CString strSrc)
|
{
|
BSTR bszSrc;
|
CString strGuid;
|
|
if (strSrc.GetLength( ) == 36)
|
{
|
strGuid = _T("{") + strSrc + _T("}");
|
bszSrc = strGuid.AllocSysString();
|
}
|
else
|
bszSrc = strSrc.AllocSysString();
|
|
if (CLSIDFromString( bszSrc, &m_guid ) != S_OK )
|
{
|
m_status = invalid;
|
// MDF BY WHB 20111112 Èç¹ûÊÇ¿Õ×Ö·û´®Çå¿Õm_guid
|
if (strSrc.IsEmpty( ))
|
memset( &m_guid, 0, sizeof(GUID) );
|
}
|
else
|
m_status = valid;
|
SysFreeString( bszSrc );
|
|
return *this;
|
}
|
|
const CGuid& CGuid::operator=(LPCWSTR lpszSrc)
|
{
|
if (CLSIDFromString( (LPWSTR)lpszSrc, &m_guid ) != S_OK )
|
m_status = invalid;
|
else
|
m_status = valid;
|
|
return *this;
|
}
|
|
bool CGuid::operator==(const CGuid& guid) const
|
{
|
return (m_status == guid.m_status &&
|
IsEqualGUID( m_guid, guid.m_guid ) );
|
}
|
|
bool CGuid::operator==(const GUID& guid) const
|
{
|
return IsEqualGUID( m_guid, guid ) != 0;
|
}
|
|
bool CGuid::operator!=(const CGuid& guid) const
|
{
|
return (m_status != guid.m_status ||
|
!IsEqualGUID( m_guid, guid.m_guid ) );
|
}
|
|
bool CGuid::operator!=(const GUID& guid) const
|
{
|
return !IsEqualGUID( m_guid, guid );
|
}
|
|
bool CGuid::operator<(const CGuid& guid) const
|
{
|
return memcmp( &m_guid, &guid.m_guid, sizeof(GUID) ) < 0;
|
}
|
|
bool CGuid::operator<(const GUID& guid) const
|
{
|
return memcmp( &m_guid, &guid, sizeof(GUID) ) < 0;
|
}
|
|
bool CGuid::operator>(const CGuid& guid) const
|
{
|
return memcmp( &m_guid, &guid, sizeof(GUID) ) > 0;
|
}
|
|
bool CGuid::operator>(const GUID& guid) const
|
{
|
return memcmp( &m_guid, &guid, sizeof(GUID) ) > 0;
|
}
|
|
CGuid::operator CString() const
|
{
|
CString strGuid;
|
|
if ( m_status != valid )
|
return strGuid;
|
|
OLECHAR szGuid[50];
|
StringFromGUID2( m_guid, szGuid, 50 );
|
strGuid = szGuid;
|
|
return strGuid;
|
}
|
|
CGuid::operator BSTR() const
|
{
|
BSTR bszGuid = NULL;
|
|
if ( m_status != valid )
|
return bszGuid;
|
|
OLECHAR szGuid[50];
|
StringFromGUID2( m_guid, szGuid, 50 );
|
bszGuid = SysAllocString( szGuid );
|
|
return bszGuid;
|
}
|
|
CGuid::operator GUID() const
|
{
|
return m_guid;
|
}
|
|
bool CGuid::IsValid() const
|
{
|
return m_status == valid;
|
}
|
|
bool CGuid::NewID()
|
{
|
HRESULT hr = CoCreateGuid( &m_guid );
|
if ( hr == S_OK )
|
{
|
m_status = valid;
|
return true;
|
}
|
|
return false;
|
}
|
|
CString CGuid::GetString() const
|
{
|
CString strGuid;
|
|
if ( m_status != valid )
|
return strGuid;
|
|
OLECHAR szGuid[50];
|
StringFromGUID2( m_guid, szGuid, 50 );
|
strGuid = szGuid;
|
|
return strGuid;
|
}
|
|
CString CGuid::GetString1() const
|
{
|
CString strGuid;
|
|
if ( m_status != valid )
|
return strGuid;
|
|
OLECHAR szGuid[50];
|
StringFromGUID2( m_guid, szGuid, 50 );
|
strGuid = szGuid;
|
strGuid = strGuid.Mid( 1, 36 );
|
|
return strGuid;
|
}
|
|
bool CGuid::FromString1( CString strSrc )
|
{
|
if ( strSrc.IsEmpty() )
|
return false;
|
|
CString strGuid;
|
BSTR bszGuid;
|
|
strSrc.TrimLeft();
|
strSrc.TrimRight();
|
strGuid.Format( _T( "{%s}" ), strSrc );
|
bszGuid = strGuid.AllocSysString();
|
if ( CLSIDFromString( bszGuid, &m_guid ) != S_OK )
|
m_status = invalid;
|
else
|
m_status = valid;
|
SysFreeString( bszGuid );
|
|
return (valid == m_status);
|
}
|