Трудность в создании VersionInfo для существующего C ++ DLL проекта - PullRequest
0 голосов
/ 18 июля 2011

У меня есть существующая C ++ DLL, которая правильно компилируется, но не имеет информации о версии, связанной с ней, как это было на вкладке Версия в Свойствах для скомпилированной библиотеки. Странно то, что у него есть файл .rc в Visual Studio, который связан с проектом и, кажется, правильно определен. Однако при использовании этого файла или его замене значениями из таких мест, как Добавление файла ресурсов в VC6 dll , Версия ресурса в DLL не отображается при щелчке правой кнопкой мыши или http://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
/////////////////////////////////////////////////////////////////////////////    

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

На самом деле мой вопрос был о получении информации о версии. Но на самом деле проблема решилась сама собой. Очевидно, файл ресурсов, поставляемый с проектом, был поврежден. Создание нового, присоединение его к проекту и перемещение по информации послужило для его работы. Спасибо.

0 голосов
/ 18 июля 2011

Чтобы получить информацию о версии из файла, вам нужно использовать 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;
}
...