zoukankan      html  css  js  c++  java
  • VC++ 创建自己的头文件包含GUID

             Guidgen 是比较好用的工具之一,可以使用它来创建ActiveX控件的UUID,同时可以创建独特的剪贴板格式名称和唯一的标识符的内核对象, 如信号量、互斥和事件。

       

             但我需要为另一个目的创建一个唯一的名称。这需要很少的努力,但需要一些技巧,以获得正确的效果。

            我需要的是一个 #define 定义的唯一 id, 它将使头文件不被包含多次。

            一般经典的模式如下:

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #if !defined(uniqueID)
    #define uniqueID
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER

    declarations

    #endif // uniqueID

             现在的问题是如何产生一个合适唯一的ID,因为你不想使得两个头文件偶然地使用了相同的ID,导致头文件相互包含的坏结果。如下是一个GUID generator:

     C++ Code 
    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;
        UuidToString((UUID *)&guid, &str);

        CString unique((LPTSTR)str);

        RpcStringFree(&str);

        unique.Replace(_T("-"), _T("_"));

        
    return unique;
    }

             注意:为了使用RpcStringFree需要链接库文件rpcrt4.lib。字符串在数字序列之间使用连字符格式化,为了获得有效的 C/C++ 标识符,使用了替换方法Replace用下划线替换它们。

              

             一个例子

     C++ Code 
    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

    #if _MSC_VER > 1000
    #pragma once
    #endif

    declarations go here

    #endif // GUIDgen_c728ff11_eb23_425e_9b0c_b56ba3dd443a   

       运行效果

       

        Demo下载:http://pan.baidu.com/s/1slx0TeH 密码:qqic 

        PS: 生成的GUID字符串前缀可根据当前文件名或文件功能进行修改

  • 相关阅读:
    使用apt-mirror建立本地debian仓库源
    在MacOS上利用docker构建buildroot
    mac开发错误:errSecInternalComponent
    NFS作为根文件系统,挂载超时
    关于物体 '固有类别' 与 '实际使用类别' 分离的情况,结构体定义方法
    Crontab could not create directory .ssh
    mac bash_profile
    Mac bash rc
    watchtower无法自动更新镜像的解决方法
    spring security oAuth2.0 数据库说明
  • 原文地址:https://www.cnblogs.com/MakeView660/p/7018083.html
Copyright © 2011-2022 走看看