///////////////////////////////////////////////////////////////////////////////
-// Name: ole/uuid.cpp
+// Name: src/msw/ole/uuid.cpp
// Purpose: implements Uuid class, see uuid.h for details
// Author: Vadim Zeitlin
-// Modified by:
+// Modified by:
// Created: 12.09.96
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// Declarations
// ============================================================================
-#ifdef __GNUG__
-#pragma implementation "uuid.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
-#define IN_WX_MAIN_CPP
#include "wx/wxprec.h"
#if defined(__BORLANDC__)
#pragma hdrstop
#endif
-#include <wx/setup.h>
+#if wxUSE_OLE && (wxUSE_DRAG_AND_DROP || wxUSE_DATAOBJ)
-#if USE_DRAG_AND_DROP
+#ifndef WX_PRECOMP
+ #include "wx/msw/wrapwin.h"
+#endif
-// standard headers
#include <rpc.h> // UUID related functions
-#include <wx/msw/ole/uuid.h>
+#include "wx/msw/ole/uuid.h"
// copy ctor
Uuid::Uuid(const Uuid& uuid)
{
- // bitwise copy Ok for UUIDs
- m_uuid = uuid.m_uuid;
+ // bitwise copy Ok for UUIDs
+ m_uuid = uuid.m_uuid;
// force the string to be allocated by RPC
// (we free it later with RpcStringFree)
+#ifdef _UNICODE
+ UuidToString(&m_uuid, (unsigned short **)&m_pszUuid);
+#else
UuidToString(&m_uuid, &m_pszUuid);
+#endif
// allocate new buffer
- m_pszCForm = new char[UUID_CSTRLEN];
+ m_pszCForm = new wxChar[UUID_CSTRLEN];
// and fill it
- memcpy(m_pszCForm, uuid.m_pszCForm, UUID_CSTRLEN);
+ memcpy(m_pszCForm, uuid.m_pszCForm, UUID_CSTRLEN*sizeof(wxChar));
}
// assignment operator
// force the string to be allocated by RPC
// (we free it later with RpcStringFree)
+#ifdef _UNICODE
+ UuidToString(&m_uuid, (unsigned short **)&m_pszUuid);
+#else
UuidToString(&m_uuid, &m_pszUuid);
+#endif
// allocate new buffer if not done yet
if ( !m_pszCForm )
- m_pszCForm = new char[UUID_CSTRLEN];
+ m_pszCForm = new wxChar[UUID_CSTRLEN];
// and fill it
- memcpy(m_pszCForm, uuid.m_pszCForm, UUID_CSTRLEN);
+ memcpy(m_pszCForm, uuid.m_pszCForm, UUID_CSTRLEN*sizeof(wxChar));
return *this;
}
+bool Uuid::operator==(const Uuid& uuid) const
+{
+ // IsEqualGUID() returns BOOL and not bool so use an explicit comparison to
+ // avoid MSVC warnings about int->bool conversion
+ return IsEqualGUID(m_uuid, uuid.m_uuid) != 0;
+}
+
// dtor
-Uuid::~Uuid()
-{
+Uuid::~Uuid()
+{
// this string must be allocated by RPC!
// (otherwise you get a debug breakpoint deep inside RPC DLL)
- if ( m_pszUuid )
+ if ( m_pszUuid )
+#ifdef _UNICODE
+ RpcStringFree((unsigned short **)&m_pszUuid);
+#else
RpcStringFree(&m_pszUuid);
+#endif
// perhaps we should just use a static buffer and not bother
// with new and delete?
m_uuid = uuid;
// get string representation
+#ifdef _UNICODE
+ UuidToString(&m_uuid, (unsigned short **)&m_pszUuid);
+#else
UuidToString(&m_uuid, &m_pszUuid);
+#endif
// cache UUID in C format
UuidToCForm();
// can't fail
UuidCreate(&uuid);
-
+
Set(uuid);
}
// set the value
-bool Uuid::Set(const char *pc)
+bool Uuid::Set(const wxChar *pc)
{
// get UUID from string
- if ( UuidFromString((uchar *)pc, &m_uuid) != RPC_S_OK)
+#ifdef _UNICODE
+ if ( UuidFromString((unsigned short *)pc, &m_uuid) != RPC_S_OK)
+#else
+ if ( UuidFromString((wxUChar *)pc, &m_uuid) != RPC_S_OK)
+#endif
// failed: probably invalid string
- return FALSE;
+ return false;
// transform it back to string to normalize it
+#ifdef _UNICODE
+ UuidToString(&m_uuid, (unsigned short **)&m_pszUuid);
+#else
UuidToString(&m_uuid, &m_pszUuid);
+#endif
// update m_pszCForm
UuidToCForm();
- return TRUE;
+ return true;
}
// stores m_uuid in m_pszCForm in a format required by
void Uuid::UuidToCForm()
{
if ( m_pszCForm == NULL )
- m_pszCForm = new char[UUID_CSTRLEN];
+ m_pszCForm = new wxChar[UUID_CSTRLEN];
- wsprintf(m_pszCForm, "0x%8.8X,0x%4.4X,0x%4.4X,0x%2.2X,0x2.2%X,"
- "0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X",
+ wsprintf(m_pszCForm, wxT("0x%8.8X,0x%4.4X,0x%4.4X,0x%2.2X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X,0x2.2%X"),
m_uuid.Data1, m_uuid.Data2, m_uuid.Data3,
- m_uuid.Data4[1], m_uuid.Data4[2], m_uuid.Data4[3], m_uuid.Data4[4],
- m_uuid.Data4[5], m_uuid.Data4[6], m_uuid.Data4[7], m_uuid.Data4[8]);
+ m_uuid.Data4[0], m_uuid.Data4[1], m_uuid.Data4[2], m_uuid.Data4[3],
+ m_uuid.Data4[4], m_uuid.Data4[5], m_uuid.Data4[6], m_uuid.Data4[7]);
}
#endif
- // USE_DRAG_AND_DROP
+ // wxUSE_DRAG_AND_DROP