GUID是軟體開發中常用的元件,用於產生唯一的對象,在C#、Java以及Python等語言中,因為它們的標準庫比較豐富,因此GUID的生成比較簡單,往往一兩句程式碼就能搞定。而C 語言本身以及標準函式庫都沒有提供產生GUID的API,因此,無法直接使用C 產生GUID。本文介紹兩種利用C 間接建立GUID的方法:1)呼叫Win32API-CoCreateGuid函數;2)使用Boost函式庫。
CoCreateGuid是Windows系統本身提供的API函數,位於objbase.h
頭檔中,因此,我們必須先包含該頭檔:
include <objbase.h>
呼叫CoCreateGuid的程式碼如下所示:
GUID guid; HRESULT h = CoCreateGuid(&guid); if (h == S_OK) ans = GuidToString(guid); else throw runtime_error("generate guid failed!");
上述程式碼中,如果建立GUID成功,則h的值為S_OK,失敗則為其他標誌位元。 HRESULT是COM元件的一類回傳值,請參考HRESULT。 GuidToString函數用於將產生的Guid轉換為std::string。相關教學:C 影片教學
std::string GuidToString(const GUID &guid) { char buf[64] = { 0 }; sprintf_s(buf, sizeof(buf), "{%08X-%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]); return std::string(buf); }
這個基於Win32API產生GUID的方法的優點在於不需要依賴其他函式庫,缺點在於無法跨平台,只能在Windows平台的使用。
使用Boost庫來產生GUID相對就比較簡單了,程式碼如下:
#include <boost/uuid/uuid.hpp> #include <boost/uuid/uuid_generators.hpp> #include <boost/uuid/uuid_io.hpp> boost::uuids::uuid uid = boost::uuids::random_generator()(); const string uid_str = boost::uuids::to_string(uid); cout << uid_str << endl;
先載入包,然後使用boost::uuids命名空間下的相關型別和函數就可以建立std::string類型的GUID了。基於BOOST來產生GUID的方法比較簡單,但是缺點是需要額外引進Boost庫。
以上是淺談C++產生GUID的兩種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!