0

適切にコンパイルされる現存する C++ DLL がありますが、コンパイルされたライブラリの [プロパティ] の [バージョン] タブなど、関連付けられているバージョン情報がありません。奇妙な点は、プロジェクトに関連付けられ、正しく定義されているように見える .rc ファイルが Visual Studio にあることです。ただし、そのファイルを使用するか、 Adding resource file to VC6 dllVersion resource in DLL not visible with right-click、または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
/////////////////////////////////////////////////////////////////////////////    
4

2 に答える 2

0

実際、私の質問は、バージョン情報を取得することでした。しかし、そのまま、問題は解決しました。どうやら、プロジェクトに付属のリソース ファイルが破損していたようです。新しいものを作成し、それをプロジェクトに添付し、それを機能させるために提供された情報を移動します。ありがとうございました。

于 2011-07-19T17:24:51.253 に答える
-1

ファイルからバージョン情報を取得するには、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;
}
于 2011-07-18T19:28:41.853 に答える