]>
git.saurik.com Git - wxWidgets.git/blob - src/msw/ole/uuid.cpp
c21369b4ef0895263d0d1e60e5e74665f5808934
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/msw/ole/uuid.cpp
3 // Purpose: implements Uuid class, see uuid.h for details
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
19 #if defined(__BORLANDC__)
23 #if wxUSE_OLE && ( wxUSE_DRAG_AND_DROP || (defined(__WXDEBUG__) && wxUSE_DATAOBJ) )
26 #include "wx/msw/wrapwin.h"
29 #include <rpc.h> // UUID related functions
31 #include "wx/msw/ole/uuid.h"
35 // ============================================================================
37 // ============================================================================
39 // length of UUID in C format
40 #define UUID_CSTRLEN 100 // real length is 66
43 Uuid::Uuid(const Uuid
& uuid
)
45 // bitwise copy Ok for UUIDs
48 // force the string to be allocated by RPC
49 // (we free it later with RpcStringFree)
51 UuidToString(&m_uuid
, (unsigned short **)&m_pszUuid
);
53 UuidToString(&m_uuid
, &m_pszUuid
);
56 // allocate new buffer
57 m_pszCForm
= new wxChar
[UUID_CSTRLEN
];
59 memcpy(m_pszCForm
, uuid
.m_pszCForm
, UUID_CSTRLEN
*sizeof(wxChar
));
62 // assignment operator
63 Uuid
& Uuid::operator=(const Uuid
& uuid
)
67 // force the string to be allocated by RPC
68 // (we free it later with RpcStringFree)
70 UuidToString(&m_uuid
, (unsigned short **)&m_pszUuid
);
72 UuidToString(&m_uuid
, &m_pszUuid
);
75 // allocate new buffer if not done yet
77 m_pszCForm
= new wxChar
[UUID_CSTRLEN
];
80 memcpy(m_pszCForm
, uuid
.m_pszCForm
, UUID_CSTRLEN
*sizeof(wxChar
));
85 bool Uuid::operator==(const Uuid
& uuid
) const
87 return m_uuid
== uuid
.m_uuid
;
90 bool Uuid::operator!=(const Uuid
& uuid
) const
92 return m_uuid
!= uuid
.m_uuid
;
98 // this string must be allocated by RPC!
99 // (otherwise you get a debug breakpoint deep inside RPC DLL)
102 RpcStringFree((unsigned short **)&m_pszUuid
);
104 RpcStringFree(&m_pszUuid
);
107 // perhaps we should just use a static buffer and not bother
108 // with new and delete?
110 delete [] m_pszCForm
;
113 // update string representation of new UUID
114 void Uuid::Set(const UUID
&uuid
)
118 // get string representation
120 UuidToString(&m_uuid
, (unsigned short **)&m_pszUuid
);
122 UuidToString(&m_uuid
, &m_pszUuid
);
125 // cache UUID in C format
141 bool Uuid::Set(const wxChar
*pc
)
143 // get UUID from string
145 if ( UuidFromString((unsigned short *)pc
, &m_uuid
) != RPC_S_OK
)
147 if ( UuidFromString((wxUChar
*)pc
, &m_uuid
) != RPC_S_OK
)
149 // failed: probably invalid string
152 // transform it back to string to normalize it
154 UuidToString(&m_uuid
, (unsigned short **)&m_pszUuid
);
156 UuidToString(&m_uuid
, &m_pszUuid
);
165 // stores m_uuid in m_pszCForm in a format required by
166 // DEFINE_GUID macro: i.e. something like
167 // 0x7D8A2281L,0x4C61,0x11D0,0xBA,0xBD,0x00,0x00,0xC0,0x18,0xBA,0x27
168 // m_pszUuid is of the form (no, it's not quite the same UUID :-)
169 // 6aadc650-67b0-11d0-bac8-0000c018ba27
170 void Uuid::UuidToCForm()
172 if ( m_pszCForm
== NULL
)
173 m_pszCForm
= new wxChar
[UUID_CSTRLEN
];
175 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"),
176 m_uuid
.Data1
, m_uuid
.Data2
, m_uuid
.Data3
,
177 m_uuid
.Data4
[0], m_uuid
.Data4
[1], m_uuid
.Data4
[2], m_uuid
.Data4
[3],
178 m_uuid
.Data4
[4], m_uuid
.Data4
[5], m_uuid
.Data4
[6], m_uuid
.Data4
[7]);
182 // wxUSE_DRAG_AND_DROP