获取Visual Studio生成dll的版本号

为自己的dll生成版本号

参考:vs中动态DLL工程中加入版本信息的方法

调用api获取版本号

上代码:

#include <tchar.h>
#include <windows.h>
#include <winver.h>

#define DLL_VERSION_LENGTH 32

// Load version lib
#ifdef WIN10
#pragma comment(lib, "Mincore.lib")
#else
#pragma comment(lib, "version.lib")
#endif

typedef struct
{
    bool is_set;
    char dll_version_string[DLL_VERSION_LENGTH];
} dll_version_record_t;

// 获取的版本号保存在全局变量中
static dll_version_record_t dll_version_record = {0, 0};

static char* get_local_program_version(void)
{
    TCHAR   file_path[MAX_PATH] = {0};
    HMODULE hodule_handle       = GetModuleHandle(_T("xxx.dll")); ///<将xxx.dll改为自己想要获取的dll
    LPVOID  lp_buff             = NULL;
    UINT    uLen                = 0;
    TCHAR*  lp_data             = NULL;
    DWORD   dw_size             = 0;
    int     len                 = 0;
    char*   ch_rtn              = NULL;
    DWORD   ret                 = 0;

    ret = GetModuleFileName(hodule_handle, file_path, MAX_PATH);
    if (ret == 0)
    {
        return NULL;
    }

    //获取版本信息大小
    dw_size = GetFileVersionInfoSize(file_path, NULL);
    if (dw_size == 0)
    {
        return NULL;
    }

    lp_data = (TCHAR*) malloc(dw_size + 1);
    if (lp_data == NULL)
    {
        return NULL;
    }
    memset(lp_data, 0, dw_size + 1);

    //获取版本信息
    ret = GetFileVersionInfo(file_path, NULL, dw_size, lp_data);
    if (ret == 0)
    {
        return NULL;
    }

    ret = VerQueryValue(lp_data, TEXT("\\StringFileInfo\\080404b0\\ProductVersion"), &lp_buff, &uLen); ///<对应Resource.rc中设置的ProductVersion
    if (ret == 0)
    {
        free(lp_data);
        lp_data = NULL;
        return NULL;
    }

    len = 2 * wcslen((TCHAR*) lp_buff);    // CString,TCHAR汉字算一个字符,因此不用普通计算长度
    ch_rtn = (char*) malloc(len + 1);
    if (ch_rtn == NULL)
    {
        return NULL;
    }
    memset(ch_rtn, 0, len + 1);
    wcstombs(ch_rtn, (TCHAR*) lp_buff, len + 1);    //转换成功返回为非负值

    strcpy(dll_version_record.dll_version_string, ch_rtn);
    dll_version_record.is_set = TRUE;

    free(lp_data);
    lp_data = NULL;
    free(ch_rtn);
    ch_rtn = NULL;

    return dll_version_record.dll_version_string;
}

参考: VC获得程序自身的版本号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值