VC++ 创建自己的头文件包含GUID
Guidgen 是比较好用的工具之一,可以使用它来创建ActiveX控件的UUID,同时可以创建独特的剪贴板格式名称和唯一的标识符的内核对象, 如信号量、互斥和事件。
但我需要为另一个目的创建一个唯一的名称。这需要很少的努力,但需要一些技巧,以获得正确的效果。
我需要的是一个 #define 定义的唯一 id, 它将使头文件不被包含多次。
一般经典的模式如下:
1
2 3 4 5 6 7 8 9 |
#if !defined(uniqueID)
#define uniqueID #pragma once declarations #endif // uniqueID |
现在的问题是如何产生一个合适唯一的ID,因为你不想使得两个头文件偶然地使用了相同的ID,导致头文件相互包含的坏结果。如下是一个GUID generator:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
CString GUIDgen()
{ GUID guid; CoCreateGuid(&guid); BYTE *str; CString unique((LPTSTR)str); RpcStringFree(&str); unique.Replace(_T("-"), _T("_")); return unique; |
注意:为了使用RpcStringFree需要链接库文件rpcrt4.lib。字符串在数字序列之间使用连字符格式化,为了获得有效的 C/C++ 标识符,使用了替换方法Replace用下划线替换它们。
一个例子:
1
2 3 4 5 6 7 8 9 10 11 |
// Header file
#if !defined(GUIDgen_c728ff11_eb23_425e_9b0c_b56ba3dd443a) #define GUIDgen_c728ff11_eb23_425e_9b0c_b56ba3dd443a #pragma once declarations go here #endif // GUIDgen_c728ff11_eb23_425e_9b0c_b56ba3dd443a |
运行效果:
Demo下载:http://pan.baidu.com/s/1slx0TeH 密码:qqic
PS: 生成的GUID字符串前缀可根据当前文件名或文件功能进行修改
VC++ 创建自己的头文件包含GUID的更多相关文章
- vc下项目的头文件包含目录以及库导入预计库目录设置
1.包含目录:include 头文件包含目录设置: project->setting->C/C++->常规: Additional include directories(附加包含目 ...
- VC++中的头文件包含问题
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用(不满足继承关系,而是组合关系).也就是需要互相声明.好了,这时候会带来一些混乱.如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已 ...
- c++头文件包含 #ifndef ##pragma once
2013-04-14 17:03 (分类:计算机程序) 烦死了,这种垃圾小问题很多,你又必须要知道.......在编写c++程序时,会编写多个类或者多个cpp文件,免不了要多次使用include包含头 ...
- VS2008引入头文件包含目录和lib库目录
全局级别的引入 为VS所有项目设置包含目录和库目录,对所有项目都有效 如下图所示:工具-选项-项目和解决方案-VC++目录-包含文件:在此添加头文件目录即可 工具-选项-项目和解决方案-VC++目录- ...
- ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件
当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义) http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...
- error C2504 类的多层继承 头文件包含
error C2504:头文件包含不全 今天碰到了很烦的问题,继承一个类之后,感觉头文件都包含了,可还是出现父类未定义的问题,最后发现,子类的子类在实现时,需要在cpp文件中包含所有他的父类的定义.因 ...
- c++ 头文件包含问题-include&class
http://blog.csdn.net/jiajia4336/article/details/8996254 前向声明概念(forward declaration) 在程序中引入了类类型的B.在声明 ...
- Android.mk文件c++头文件包含问题
Eclipse 中 Android.mk文件c++头文件包含问题 jni中的目录结构如下: 编译找不到头文件 LOCAL_PATH := $(call my-dir)LOCAL_C_INCLUDES ...
- codeblocks + MinGW 以及vc 使用预编译头文件的方法
MinGW编译器: 1.打开工程文件,在工程文件浏览其中,在你要设置为预编译的头文件上,点击鼠标右键,选择“属性(properties)” 你会看到一个多页面的属性框,选择“构建(build)”页面 ...
随机推荐
- 【Oracle】查看死锁与解除死锁
1.查询死锁的进程(下面2条语句均可用) 语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.obj ...
- ubuntu——Kconfig、.config、Makefile的关系
原文地址:http://blog.csdn.net/estate66/article/details/5886816 ,本人对此文有改进. 当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译 ...
- dom与jquery互相转换
/*取得<input>标签中的value属性的内容[dom对象->jquery对象] var inputElement = document.getElementById(" ...
- [Linux]--解决虚拟机中安装ubuntu不能自适应的问题
这几天换了新的电脑,但是装上ubuntu mate以后就一直不能自适应窗口大小改变分辨率,奈何我是个强迫症,再加上也不想老师带着自己的笔记本跑动跑西的(主要是太重了...),于是今天花了一下午的时间找 ...
- KISS My YAGNI,KISS (Keep It Simple, Stupid)和 YAGNI (You Ain’t Gonna Need It)软件开发原则
http://www.aqee.net/kiss-my-yagni/我们都知道KISS (Keep It Simple, Stupid)和 YAGNI (You Ain’t Gonna Need It ...
- javascript获取地址栏参数
http://gzycm520.blog.51cto.com/175220/71030方法一: <script type="text/javascript"> < ...
- firefox浏览器批处理插件imacros
http://www.360doc.com/content/14/1012/19/4360822_416372016.shtml javascript部分 var code = "CODE: ...
- 区别getElementByID,getElementsByName,getElementsByTagName
以人来举例说明,人有能标识身份的身份证,有姓名,有类别(大人.小孩.老人)等. 1. ID 是一个人的身份证号码,是唯一的.所以通过getElementById获取的是指定的一个人. 2. Name ...
- vim中不同模式的帮助信息的查找
vim的模式有多种,比如normal(普通模式),insert(插入模式),command(命令行模式),visual(可视化模式).相同的命令和快捷键在不同的模式下功能是不一样的,因此帮助信息也是分 ...
- windows 添加打印机
控制面板---->硬件和声音---->设备和打印机--->点击添加打印机 最后安驱动(选择通用) OK!