当前第2页 返回上一页
GUID是软件开发中常用的组件,用于生成唯一的对象,在C#、Java以及Python等语言中,因为它们的标准库比较丰富,因此GUID的生成比较简单,往往一两句代码就能搞定。而C++语言本身以及标准库都没有提供生成GUID的API,因此,无法直接使用C++生成GUID。本文介绍两种利用C++间接创建GUID的方法:1)调用Win32API-CoCreateGuid函数;2)使用Boost库。
使用CoCreateGuid函数
CoCreateGuid是Windows系统本身提供的API函数,位于objbase.h
头文件中,因此,我们必须首先包括该头文件:
调用CoCreateGuid的代码如下所示:
1 2 3 4 5 6 | 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++视频教程
1 2 3 4 5 6 7 8 9 10 | 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.Data 1 , guid.Data 2 , guid.Data 3 ,
guid.Data 4 [ 0 ], guid.Data 4 [ 1 ], guid.Data 4 [ 2 ], guid.Data 4 [ 3 ],
guid.Data 4 [ 4 ], guid.Data 4 [ 5 ], guid.Data 4 [ 6 ], guid.Data 4 [ 7 ]);
return std::string(buf);
}
|
这种基于Win32API生成GUID的方法的优点在于不需要依赖其他库,缺点在于无法跨平台,只能在Windows平台的使用。
使用Boost库
使用Boost库来生成GUID相对就比较简单了,代码如下:
1 2 3 4 5 6 7 | #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的两种方法的详细内容!
返回前面的内容
相关阅读 >>
C++中如何避免内存泄漏?
案例分享C++ map的使用和 查找性能测试
C++万能头文件是什么?
C++ vector容器函数使用范例
C++类型如何进行转换
新手程序员应该知道的c语言和C++的区别
C++怎么运行
C++输出语句
C++如何实现字符串分割函数split?(代码示例)
C++源程序文件的扩展名是什么
更多相关阅读请进入《C++》频道 >>
转载请注明出处:木庄网络博客 » 浅谈C++生成GUID的两种方法