GUID の生成
プログラム内で GUID を生成する方法を紹介します。 COM ライブラリで GUID を生成するための API は CoCreateGuid です。 これを用いると GUID を生成できます。
値は GUID 型で返ります。
typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID;
GUID 型のままでは扱いにくいだろうと思いましたので、下記のコードでは文字列に直しています。
#include <windows.h> #include <stdio.h> #include <objbase.h> BOOL GetGuid( char *szGuid ) { GUID guid; HRESULT hr; hr = ::CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if( FAILED(hr) ) { *szGuid = NULL; return FALSE; } ::CoCreateGuid(&guid); sprintf( szGuid, "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0],guid.Data4[1],guid.Data4[2],guid.Data4[3], guid.Data4[4],guid.Data4[5],guid.Data4[6],guid.Data4[7]); ::CoUninitialize(); return TRUE; } int main( int argc, char* argv[] ) { char szGuid[37]; for( int i=0; i<10; i++) { if ( !GetGuid( szGuid ) ) { continue; } printf("%s\n", szGuid); } return 0; }
ちなみに、プログラムの中で生成したいのではなく GUID が欲しいだけなら Windows SDK 付属の GUID Generator が使えます。
Windows SDK 付属の GUID Generator