繁体   English   中英

我在哪里可以找到库“version.lib”以成功调用 GetFileVersionInfoSize()?

[英]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约定:

  • lib开始: libversion
  • 扩展名可以是.so.a (取决于库是动态的还是静态的)

通常,它应该驻留在${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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM