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

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説