fix to not crash when built with msvc6 ( bad calling convention on imports ). fix error-handling bugs, added missing error-handling Modified: trunk/reactos/tools/rbuild/backend/msvc/genguid.cpp _____
Modified: trunk/reactos/tools/rbuild/backend/msvc/genguid.cpp --- trunk/reactos/tools/rbuild/backend/msvc/genguid.cpp 2005-08-24 02:20:41 UTC (rev 17498) +++ trunk/reactos/tools/rbuild/backend/msvc/genguid.cpp 2005-08-24 02:55:08 UTC (rev 17499) @@ -24,41 +24,55 @@
#include <objbase.h> #include <stdio.h>
-static HRESULT (*pCoInitialize)(PVOID); -static void (*pCoUninitialize)(void); -static HRESULT (*pCoCreateGuid)(GUID*); +typedef HRESULT _stdcall CoInitializeFunc ( PVOID ); +typedef void _stdcall CoUninitializeFunc ( void ); +typedef HRESULT _stdcall CoCreateGuidFunc ( GUID* );
+static CoInitializeFunc *pCoInitialize = NULL; +static CoUninitializeFunc *pCoUninitialize = NULL; +static CoCreateGuidFunc *pCoCreateGuid = NULL; + void gen_guid() { GUID m_guid; HRESULT result; - char *strfmt = ""; - HMODULE olelib; + bool good_guid = false;
- /* Load ole32. We will need it later on */ - olelib = LoadLibraryA( "ole32.dll" ); - - if (olelib != NULL) - pCoInitialize = (HRESULT (*)(void*))GetProcAddress( olelib, "CoInitialize" ); - pCoUninitialize = (void (*)())GetProcAddress( olelib, "CoUninitialize" ); - pCoCreateGuid = (HRESULT (*)(GUID*))GetProcAddress( olelib, "CoCreateGuid" ); - - if (pCoInitialize(NULL) != S_OK) + // Load ole32. We will need it later on + HMODULE olelib = LoadLibrary ( "ole32.dll" ); + if ( olelib != NULL ) { - printf("Unable to initalize OLE libraries\n"); + pCoInitialize = (CoInitializeFunc *)GetProcAddress( olelib, "CoInitialize" ); + pCoUninitialize = (CoUninitializeFunc *)GetProcAddress( olelib, "CoUninitialize" ); + pCoCreateGuid = (CoCreateGuidFunc *)GetProcAddress( olelib, "CoCreateGuid" ); + if ( !pCoInitialize || !pCoUninitialize || !pCoCreateGuid ) + printf ( "Missing exports from ole32.dll\n" ); + else + { + if (pCoInitialize(NULL) != S_OK) + printf("Unable to initalize OLE libraries\n"); + else + { + result = pCoCreateGuid(&m_guid); + if (result != S_OK) + printf("Unable to create GUID\n"); + else + good_guid = true; + pCoUninitialize(); + } + } + FreeLibrary ( olelib ); } - result = pCoCreateGuid(&m_guid); - if (result != S_OK) { - printf("Unable to create GUID\n"); - pCoUninitialize(); + if ( !good_guid ) + { + // TODO FIXME - fall-back to random #'s } - strfmt = "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X\r\n"; + const char* strfmt = "%08lX-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X\r\n";
printf(strfmt,m_guid.Data1,m_guid.Data2,m_guid.Data3,m_guid.Data4[0], - m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.D ata4[5], - m_guid.Data4[6],m_guid.Data4[7],m_guid.Data1,m_guid.Data2,m_guid.Data3,m _guid.Data4[0], - m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.D ata4[5], - m_guid.Data4[6],m_guid.Data4[7]); - pCoUninitialize(); + m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.D ata4[5], + m_guid.Data4[6],m_guid.Data4[7],m_guid.Data1,m_guid.Data2,m_guid.Data3,m _guid.Data4[0], + m_guid.Data4[1],m_guid.Data4[2],m_guid.Data4[3],m_guid.Data4[4],m_guid.D ata4[5], + m_guid.Data4[6],m_guid.Data4[7]); }
#else /* Linux, etc */