关于读取应用程序版本号的问题

Brainlj 2008-12-03 02:37:20
目前应用程序的版本号为8.3.2.66871,我用下面的代码读取来却出错,得出的值的十六进制为8.3.2.0537.最后一个的值应该是10537,读出来却是0537,把前面一个1给丢了,因为一个WORD最大支持FFFF,也就是65535。请高手指点。

typedef struct tagVersionInfo
{
BYTE btOSImgVer1; //bit15-8
BYTE btOSImgVer2; //bit0-7
BYTE btReserved1;
BYTE btReserved2;
DWORD dwProductVersoion1;
DWORD dwProductVersoion2;
DWORD dwProductVersoion3;
DWORD dwProductVersoion4;
}VERSIONINFO,*LPVERSIONINFO;

typedef struct tagAPPVERSION
{
DWORD dwFileVersion1;
DWORD dwFileVersion2;
DWORD dwFileVersion3;
DWORD dwFileVersion4;
DWORD dwProductVersion1;
DWORD dwProductVersion2;
DWORD dwProductVersion3;
DWORD dwProductVersion4;
}APPVERSION;

VERSIONINFO vi = {0};
DWORD dwVersionInfoSize;
DWORD dwHandle;
VS_FIXEDFILEINFO *ffi = NULL;
APPVERSION AppVersion;
APPVERSION* lpAppVersion=&AppVersion;


VOID GetVersion()
{

dwVersionInfoSize = GetFileVersionInfoSize(IGO_AP, &dwHandle);
if(dwVersionInfoSize>0)
{
pbyBuffer = new char[dwVersionInfoSize];
if(GetFileVersionInfo(IGO_AP,NULL, dwVersionInfoSize,pbyBuffer))
{
int bReturn = VerQueryValue(pbyBuffer, _T("\\"), reinterpret_cast<void**>(&ffi), &nVersionInfoLen);
lpAppVersion->dwFileVersion1 = HIWORD(ffi->dwFileVersionMS);
lpAppVersion->dwFileVersion2 = LOWORD(ffi->dwFileVersionMS);
lpAppVersion->dwFileVersion3 = HIWORD(ffi->dwFileVersionLS);
lpAppVersion->dwFileVersion4 = LOWORD(ffi->dwFileVersionLS);
lpAppVersion->dwProductVersion1 = HIWORD(ffi->dwProductVersionMS);
lpAppVersion->dwProductVersion2 = LOWORD(ffi->dwProductVersionMS);
lpAppVersion->dwProductVersion3 = HIWORD(ffi->dwProductVersionLS);
lpAppVersion->dwProductVersion4 = LOWORD(ffi->dwProductVersionLS);
}
delete [] pbyBuffer;
}
vi.dwProductVersoion1 = lpAppVersion->dwProductVersion1;
vi.dwProductVersoion2 = lpAppVersion->dwProductVersion2;
vi.dwProductVersoion3 = lpAppVersion->dwProductVersion3;
vi.dwProductVersoion4 = lpAppVersion->dwProductVersion4;
}
...全文
286 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Brainlj 2008-12-03
  • 打赏
  • 举报
回复
不是文件版本,是产品的版本号
Conry 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Brainlj 的回复:]
这个是第三方的应用程序,难道没有办法把它读出来,但是右击属性中的版本却可以看到正确的值。
[/Quote]
你看到的应该是其他版本信息里面显示的吧
第一行的文件版本后面不可能是8.3.2.66871吧,你在资源编辑器编辑如果大于65535的话会自动变小的(编辑最上面那行的,不是下面的)
Brainlj 2008-12-03
  • 打赏
  • 举报
回复
这个是第三方的应用程序,难道没有办法把它读出来,但是右击属性中的版本却可以看到正确的值。
菜牛 2008-12-03
  • 打赏
  • 举报
回复
越界了,没有办法。应该在资源编辑器中输不进去的吧。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧