2 * Based on the genguid utility for WINE and ReactOS
4 * Copyright 2003 Jonathan Wilson
5 * Copyright 2005 Steven Edwards
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "../../pch.h"
33 typedef HRESULT _stdcall
CoInitializeFunc ( PVOID
);
34 typedef void _stdcall
CoUninitializeFunc ( void );
35 typedef HRESULT _stdcall
CoCreateGuidFunc ( GUID
* );
37 static CoInitializeFunc
*pCoInitialize
= NULL
;
38 static CoUninitializeFunc
*pCoUninitialize
= NULL
;
39 static CoCreateGuidFunc
*pCoCreateGuid
= NULL
;
43 MSVCBackend::_gen_guid()
47 bool good_guid
= false;
50 // Load ole32. We will need it later on
51 HMODULE olelib
= LoadLibrary ( "ole32.dll" );
54 pCoInitialize
= (CoInitializeFunc
*)GetProcAddress( olelib
, "CoInitialize" );
55 pCoUninitialize
= (CoUninitializeFunc
*)GetProcAddress( olelib
, "CoUninitialize" );
56 pCoCreateGuid
= (CoCreateGuidFunc
*)GetProcAddress( olelib
, "CoCreateGuid" );
57 if ( !pCoInitialize
|| !pCoUninitialize
|| !pCoCreateGuid
)
58 printf ( "Missing exports from ole32.dll\n" );
61 if (pCoInitialize(NULL
) != S_OK
)
62 printf("Unable to initalize OLE libraries\n");
65 result
= pCoCreateGuid(&m_guid
);
67 printf("Unable to create GUID\n");
73 FreeLibrary ( olelib
);
77 // TODO FIXME - fall-back to random #'s
79 const char* strfmt
= "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X";
80 sprintf(guid
, strfmt
,m_guid
.Data1
,m_guid
.Data2
,m_guid
.Data3
,m_guid
.Data4
[0],
81 m_guid
.Data4
[1],m_guid
.Data4
[2],m_guid
.Data4
[3],m_guid
.Data4
[4],m_guid
.Data4
[5],
82 m_guid
.Data4
[6],m_guid
.Data4
[7],m_guid
.Data1
,m_guid
.Data2
,m_guid
.Data3
,m_guid
.Data4
[0],
83 m_guid
.Data4
[1],m_guid
.Data4
[2],m_guid
.Data4
[3],m_guid
.Data4
[4],m_guid
.Data4
[5],
84 m_guid
.Data4
[6],m_guid
.Data4
[7]);
89 #else /* Linux, etc */
92 MSVCBackend::_gen_guid()
95 #endif /* WIN32/Linux */