Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为现有C+;建立VersionInfo的困难+;DLL项目 我有一个现存的C++ DLL,编译得很好,但是没有与它相关的版本信息,这是编译库属性中的版本标签。奇怪的是,它在VisualStudio中确实有一个.rc文件,该文件与项目关联,并且似乎定义正确。但是,无论是使用该文件,还是将其替换为来自位置(例如,或)的值,我仍然无法使其导出DLL信息。我无法发布项目的大部分代码,因为它是内部代码,但这是.rc文件的内容: //Microsoft Developer Studio生成的资源脚本。 //_C++_Dll_Resources_Version_Versioninfo - Fatal编程技术网

为现有C+;建立VersionInfo的困难+;DLL项目 我有一个现存的C++ DLL,编译得很好,但是没有与它相关的版本信息,这是编译库属性中的版本标签。奇怪的是,它在VisualStudio中确实有一个.rc文件,该文件与项目关联,并且似乎定义正确。但是,无论是使用该文件,还是将其替换为来自位置(例如,或)的值,我仍然无法使其导出DLL信息。我无法发布项目的大部分代码,因为它是内部代码,但这是.rc文件的内容: //Microsoft Developer Studio生成的资源脚本。 //

为现有C+;建立VersionInfo的困难+;DLL项目 我有一个现存的C++ DLL,编译得很好,但是没有与它相关的版本信息,这是编译库属性中的版本标签。奇怪的是,它在VisualStudio中确实有一个.rc文件,该文件与项目关联,并且似乎定义正确。但是,无论是使用该文件,还是将其替换为来自位置(例如,或)的值,我仍然无法使其导出DLL信息。我无法发布项目的大部分代码,因为它是内部代码,但这是.rc文件的内容: //Microsoft Developer Studio生成的资源脚本。 //,c++,dll,resources,version,versioninfo,C++,Dll,Resources,Version,Versioninfo,要从文件中检索版本信息,需要使用GetFileVersionInfo()。在通过调用GetFileVersionInfoSize()检索版本信息之前,应该执行另外一个步骤,确定存储的版本信息的大小 bool GetVersionInfo(const char*filename,int&major,int&minor) { 德沃德·韦布弗斯; char verBuffer[2048]; //获取文件中版本信息块的大小 verBufferSize=GetFileVersionInfo大小(文件名,N

要从文件中检索版本信息,需要使用GetFileVersionInfo()。在通过调用GetFileVersionInfoSize()检索版本信息之前,应该执行另外一个步骤,确定存储的版本信息的大小

bool GetVersionInfo(const char*filename,int&major,int&minor)
{
德沃德·韦布弗斯;
char verBuffer[2048];
//获取文件中版本信息块的大小
verBufferSize=GetFileVersionInfo大小(文件名,NULL);
如果(verBufferSize>0&&verBufferSize-dwProductVersionMS;
次要=verInfo->DWProductVersions;
返回true;
}
}
}
返回false;
}

实际上,我的问题是如何获取版本信息。但事实上,问题自行解决了。显然,项目附带的资源文件已损坏。创建一个新文件,将其附加到项目中,然后移动信息以使其正常工作。谢谢。

澄清您对“导出”一词的使用。版本信息是否未显示在DLL的资源部分?是否尝试通过
GetProcAddress
GetFileVersionInfo
访问它?很难找到此信息。基本检查:在Visual Studio中使用File+Open+File。您可以看到嵌入的资源(如果有的话)。
#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
/////////////////////////////////////////////////////////////////////////////    
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;
}