[英]Where can i find library "version.lib" in order to successfully call GetFileVersionInfoSize()?
我正在DevC++上开发一个使用MinGW64的项目。 在 Windows 7 上(我不知道这是否与我的问题有关)。
我在编译C++程序时遇到问题,我在其中调用函数GetFileVersionInfoSize()
,它是:
main.cpp:(.text+0x51):对`GetFileVersionInfoSizeA'的未定义引用
经过两天的研究,我了解到我必须在链接器的参数中包含我计算机中缺少的“version.lib”文件,我到处搜索。 我什至在网上找不到下载镜像,所以我问,有人知道我在哪里可以找到 version.lib 吗? 也许隐藏在我的电脑或网络中的某个地方? 也许新安装了 MinGW64? 我不知道,因为我安装的 MinGW64 是随 DevC++ 一起提供的。
谢谢阅读。
由于它是为GCC构建的环境,库名称将遵循Nix约定:
通常,它应该驻留在${MINGW_INSTALL_DIR} /x86_64-w64-mingw32/lib/libversion.a 中。
一个安装示例是: f:\\Install\\Qt\\Qt\\Tools\\mingw730_64\\x86_64-w64-mingw32\\lib\\libversion.a 。
[MinGW]:HOWTO 指定与 MinGW 一起使用的库的位置也可能有用。
但是因为它是一个系统库,你不应该关心它的路径, MinGW应该自动找到它,你所要做的就是将它传递给链接器(使用标准方式)。
谢谢大家给我的建议
在这个答案中有如何在这种情况下找到Version.lib 。
下面是关于完成使用GetFileVersionInfoSize()
、 GetFileVersionInfo()
和VerQueryValue()
来获取可执行文件的产品名称,这就是为什么我需要Version.lib ,实际上在我的机器上被称为libversion.a 。
最后编辑:我设法实现了我想要的,这是适用于我的情况的代码:
// filename contains the path of the .exe we want to get Product Name
int version_info_size = GetFileVersionInfoSize(filename, NULL);
if(version_info_size > 0) {
BYTE *version_info_buffer = new BYTE[version_info_size];
if(GetFileVersionInfo(filename, 0, version_info_size, version_info_buffer)) {
char *product_name = NULL;
UINT pLenFileInfo = 0;
if(VerQueryValue(version_info_buffer, TEXT("\\StringFileInfo\\040904e4\\ProductName"),
(LPVOID*)&product_name, &pLenFileInfo)) cout << product_name;
}
}
请注意,如果要将product_name
与另一个值进行比较,则必须执行类似string product_name_str = product_name
并比较该字符串变量,否则比较将始终返回false 。 或者也许只是做(string)product_name
,我应该尝试。
040904e4
是我执行此操作所需的 lang-code 十六进制翻译,由于此答案中的代码,我找到了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.