模块的版本信息到哪里去了?

由于老汉喜欢用 SDK 写程序,结果发现了这么一个问题:手工往中加入版本资源,编译链接均通过,却无法使用资源浏览器的属性功能看到“版本”那个属性页。

开始以为是没有链接到最终文件中,可是用二进制查看工具查看编译出来的 .res 文件和最终的 .exe 文件,在尾部却能看到版本资源中的字符串;后来又以为 VC6 的链接器生成时有 BUG,结果用 VC8 也不行;再后来怀疑的 PE 文件格式有误,可是使用别的 PE 文件查看器又都能列出版本资源块。自己写了个验证程序,结果调用 GetFileVersionInfoSize() API 即失败,错误信息说没有找到资源,晕了……

后来艰苦奋战,发现了奥秘。只要在 .rc 文件中包含了 windows.h 头文件(无论直接间接),版本属性页就可以显示出来,去掉就不行。

问题是解决了,可是稀里糊涂,我怀疑还是某个头文件给链接器传递了什么参数的原因。有明白的么?

发表评论

电子邮件地址不会被公开。 必填项已用*标注