【问题标题】:Difficulty in establishing VersionInfo for existing C++ DLL project难以为现有 C++ DLL 项目建立 VersionInfo
【发布时间】:2011-09-03 17:39:41
【问题描述】:

我有一个可以正确编译的现存 C++ DLL,但没有与之相关的版本信息,例如已编译库的“属性”中的“版本”选项卡。奇怪的是,它在 Visual Studio 中确实有一个 .rc 文件,该文件与项目相关联并且似乎已正确定义。但是,无论是使用该文件,还是将其替换为 Adding resource file to VC6 dllVersion resource in DLL not visible with right-clickhttp://www.codeproject.com/KB/DLL/XDllPt3.aspx 等位置的值,我仍然无法导出 DLL 信息。我无法发布项目的大部分代码,因为它是内部的,但这是 .rc 文件的内容: //Microsoft Developer Studio 生成的资源脚本。 //

#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904B0"
        BEGIN
            VALUE "CompanyName", "\0"
            VALUE "FileDescription", "PTU DLL library\0"
            VALUE "FileVersion", "1, 0, 0, 1\0"
            VALUE "InternalName", "PTUDLL32\0"
            VALUE "LegalCopyright", "Copyright (C) 1999\0"
            VALUE "ProductName", "PTU DLL library\0"
            VALUE "ProductVersion", "1, 0, 0, 1\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END


#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////    

【问题讨论】:

  • 澄清您对“出口”一词的使用。版本信息不会出现在 DLL 的资源部分吗?您是否尝试通过GetProcAddressGetFileVersionInfo 访问它?
  • 很难摸索这个。基本检查:在 Visual Studio 中使用 File + Open + File。您会看到嵌入的资源(如果有)。

标签: c++ dll resources version versioninfo


【解决方案1】:

实际上我的问题是关于获取版本信息。但事实上,问题本身就解决了。显然,项目附带的资源文件已损坏。创建一个新的,将其附加到项目中,并移动提供的信息以使其工作。谢谢。

【讨论】:

    【解决方案2】:

    要从文件中检索版本信息,您需要使用 GetFileVersionInfo()。在通过调用 GetFileVersionInfoSize() 检索版本信息之前,您应该采取额外的步骤来确定存储的版本信息的大小。

    bool GetVersionInfo(const char *filename, int &major, int &minor)
    {
        DWORD   verBufferSize;
        char    verBuffer[2048];
    
        //  Get the size of the version info block in the file
        verBufferSize = GetFileVersionInfoSize(filename, NULL);
        if(verBufferSize > 0 && verBufferSize <= sizeof(verBuffer))
        {
            //  get the version block from the file
            if(TRUE == GetFileVersionInfo(filename, NULL, verBufferSize, verBuffer))
            {
                UINT length;
                VS_FIXEDFILEINFO *verInfo = NULL;
    
                //  Query the value
                if(TRUE == VerQueryValue(verBuffer, "\\", reinterpret_cast<LPVOID*>(&verInfo), &length))
                {
                    //  Pull the version values. You can alternatively
                    //  get the version of the file from dwFileVersionMS
                    //  and dwFileVersionLS if necessary.
                    major = verInfo->dwProductVersionMS;
                    minor = verInfo->dwProductVersionLS;
    
                    return true;
                }
            }
        }
    
        return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多