VC++ 获取文件版本号

2023-11-01

源码实现:

#pragma comment(lib,"Version.lib")
typedef struct _VS_VERSIONINFO { 
	WORD  wLength;  
	WORD  wValueLength;  
	WORD  wType;  
	WCHAR szKey[];  
	WORD  Padding1[];  
	VS_FIXEDFILEINFO Value;   
	WORD  Padding2[];   
	WORD  Children[]; 
}VS_VERSIONINFO;

CString GetFileVersion(CString strFilePath)
{
	CString strRet = _T("");
	VS_VERSIONINFO		*pVerInfo = NULL;
	LPBYTE              pOffsetBytes = NULL;
	VS_FIXEDFILEINFO    *pFixedInfo = NULL;
	DWORD               dwHandle=0,dwSize=0;
		
	dwSize = ::GetFileVersionInfoSize((LPTSTR)(LPCTSTR)strFilePath, &dwHandle);
	if (0 < dwSize)
	{
		LPBYTE lpBuffer = new BYTE[dwSize];
		::memset(lpBuffer,0,sizeof(dwSize));
	
		if (GetFileVersionInfo((LPTSTR)(LPCTSTR)strFilePath, 0, dwSize, lpBuffer) != FALSE)
		{
			#define roundoffs(a,b,r) (((BYTE *) (b) - (BYTE *) (a) + ((r) - 1)) & ~((r) - 1))
            #define roundpos(a,b,r) (((BYTE *) (a)) + roundoffs(a,b,r))
            
            
            pVerInfo = (VS_VERSIONINFO *) lpBuffer;    
            pOffsetBytes = (BYTE *) &pVerInfo->szKey[wcslen(pVerInfo->szKey) + 1];
            pFixedInfo = (VS_FIXEDFILEINFO *) roundpos(pVerInfo, pOffsetBytes, 4);

            DWORD version = pFixedInfo->dwFileVersionMS;
            DWORD version2 = pFixedInfo->dwFileVersionLS;

			WORD a = HIWORD(version);
			WORD b = LOWORD(version);
			WORD c = HIWORD(version2);
			WORD d = LOWORD(version2);
			strRet.Format("%d.%d.%d.%d",a,b,c,d);
		}
		SAFE_DELETE_ARRAY(lpBuffer);
	}
		
	return strRet;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC++ 获取文件版本号 的相关文章

随机推荐

  • nacos打开空白页,内存不足,磁盘不足

    nacos打开空白页 内存不足 磁盘不足 场景描述 原因 内存不足 同时查看日志发现磁盘空间不足 nginx日志 占磁盘空间太大 重命名 修改后 查看文件名 重新执行生成日志文件 不行 就重启nginx 再执行命令 删除旧文件 内存不足 查
  • 从零开始刷LeetCode-0

    从leetcode中简单的题开始 上车吧 给定数组vector
  • webrtc代码走读一(视频参数配置汇总)

    一 视频编码格式初始配置 webrtc media engine internalencoderfactory cc 1 按照Push顺序 优先选取第一个编解码格式 2 屏蔽kUlpfecCodecName kRedCodecName的co
  • 「BLIP 微调指南」以 Image-Text Captioning 任务为例

    前言 近日需要用到 BLIP 微调下游任务 搜索发觉如今并无 BLIP 微调教程 下面就以 Image Text Captioning 任务为例 演示如何完成 BLIP 模型在自己数据集上的微调 目录 1 BLIP 介绍 2 关键代码定位
  • Java GUI界面之简易计算器的制作以及非GUI实现(中缀表达式,后缀表达式)

    最近刚开始学习GUI界面的知识 就尝试做了一个计算器 其实我主要做的是个界面 监听部分还是查询了资料 package moder02 import java awt import java awt event ActionEvent imp
  • Java web项目部署到阿里云服务器上

    首先 笔者为大三学生 平时课设和练习写了不少得得ava web项目 但是每次运行都是localhost开始 实在厌烦 而且每次验收项目都要带着电脑 这点挺无语得 所以萌生了买阿里云服务器来部署项目得冲动 之前觉得部署项目这件事会很难 但是接
  • IAP 内购二次验证(出现的问题21002及解决方案)

    一 验证 1 完成购买后读取本地的 receiptData 进行 base64 编码 转换成字符串 读取 NSURL receiptUrl NSBundle mainBundle appStoreReceiptURL NSData rece
  • html页面遍历数组,JavaScript中利用for循环遍历数组

    先看一段代码Document 一个普通的数组 var arr 3 5 2 6 普通的for 循环遍历 for var i 0 i lt arr length i console log i 类型 typeof i arr i 用for in
  • 梁乾东:4.27黄金原油最新走势分析及布局策略附空单解套

    消息面解析 周一 4月26日 金价坚挺 而供应担忧令钯金接近前一交易日触及的纪录高位 受本周美联储会议前美元走弱的支撑 美市现货黄金上涨0 1 交投于1779美元 盎司 日内稍早跌至1768 49美元 盎司低点 随后从低点反弹 美元兑其他主
  • 【前端】Vue3+Vant4项目:旅游App-项目总结与预览(已开源)

    文章目录 项目预览 首页Home 日历 日期选择 开始搜索 位置选择 上搜索框 热门精选 房屋详情1 热门精选 房屋详情2 其他页面 项目笔记 项目代码 项目数据 项目预览 启动项目 npm run dev 在浏览器中F12 首页Home
  • 在Ubuntu上搭建DDNS动态域名解析服务

    文章目录 一 前置条件 二 具体步骤 2 1 下载脚本程序 2 2 修改配置文件 2 3 运行脚本进行测试 2 4 设置cron定时任务 三 参考文章 一 前置条件 1 已经在腾讯云上申请了dnspod的域名 2 已经给域名创建了秘钥 AP
  • python中find函数的使用方法_详解Python中find()方法的使用

    详解Python中find 方法的使用 find 方法判断字符串str 如果起始索引beg和结束end索引能找到在字符串或字符串的一个子串中 语法 以下是find 方法的语法 str find str beg 0 end len strin
  • 破局新金融风险 知识图谱非常香!

    导言 本篇为金融行业 自主可控 系列文章 前几期我们从底层逻辑 负载均衡等角度分析了金融行业 科技创新 自主可控 所面临的挑战 本期我们从知识图谱谈起 在金融行业 知识图谱应用的范围越来越广 知识图谱与 AI 结合之后 可以识别伪造资料 恶
  • 常见计算机英文汇总

    CPU Central Processing Unit 中央处理单元 又叫中央处理器或微处理器 被喻为电脑的心脏 RAM Random Access Memory 随机存储器 即人们常说的 内存 ROM Read Only Memory 只
  • 检测Class是否相等

    在C 的容器中 常用的三个容器数组 ArrayList Hashtable 数组比较简单 实现某种单一数据的存储 但是并不能自由插入 移除和容纳不同的对象 所以ArrayList是数组的替代品 并且由于ArrayList可以自由的添加 删除
  • 使用Python+OpenCV+yolov5实现行人目标检测

    介绍 目标检测支持许多视觉任务 如实例分割 姿态估计 跟踪和动作识别 这些计算机视觉任务在监控 自动驾驶和视觉答疑等领域有着广泛的应用 随着这种广泛的实际应用 目标检测自然成为一个活跃的研究领域 我们在Fynd的研究团队一直在训练一个行人检
  • uniapp h5网页打开白屏

    修改了默认基本运行路径 然后直接打开index html的情况下是会这样 放在nginx服务器上运行就ok了 把默认的 路径修改了 cloudh5 nginx html目录下放子网站 cloudh5
  • VSCode找不到头文件,配置头文件的方法

    使用VSCode编译C C 时 会存在找不到头文件的情况这时候需要设置两个地方 1 c cpp properites json 2 task json 以下是我修改的对应的文件 1 2 3 4 5 6 7 8 9 10 11 12 13 1
  • 身份证读取设备开发解决方案:3、单片机读取身份证信息的demo

    身份证读取设备开发解决方案 3 单片机读取身份证信息的demo 文章目录 身份证读取设备开发解决方案 3 单片机读取身份证信息的demo 一 前言 二 部分代码及结果展示 1 准备 2 部分代码 3 结果展示 三 常见错误 错误1 错误2
  • VC++ 获取文件版本号

    源码实现 pragma comment lib Version lib typedef struct VS VERSIONINFO WORD wLength WORD wValueLength WORD wType WCHAR szKey