2011-07-18 11 views
0

正しくコンパイルされたコンパイル済みライブラリの[プロパティ]の[バージョン]タブなど、バージョン情報が関連付けられていない既存のC++ DLLがあります。奇妙な点は、Visual Studioにプロジェクトに関連付けられており正しく定義されているような.rcファイルがあることです。しかし、そのファイルを使用するか、または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で生成されたリソーススクリプト。 //VersionInfoを既存のC++ DLLプロジェクトに設定するのが難しい

#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 
/////////////////////////////////////////////////////////////////////////////  
+0

「輸出」という用語の使用を明確にしてください。バージョン情報がDLLのリソースセクションに表示されませんか? 'GetProcAddress'または' GetFileVersionInfo'を使ってアクセスしようとしていますか? –

+0

これを乱すのは難しいです。基本チェック:Visual Studioでファイル+開く+ファイルを使用します。存在する場合、埋め込まれたリソースが表示されます。 –

答えて

-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; 
} 
0

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

関連する問題