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 */