簡體   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