右键单击DLL中的版本资源不可见

时间:2009-05-12 12:43:00

标签: c++ visual-studio-2008 dll resources visual-c++-2008-express

我正在尝试做一些在常规MSVC中很容易做的事情,但在VC ++ Express中不容易支持。

VC ++ Express中没有资源编辑器。所以我在我的DLL项目中添加了一个名为version.rc的文件。该文件具有以下内容,该内容由资源编译器编译并添加到最终的DLL中。可以使用重新分析器在DLL中查看此资源,但在Windows资源管理器中右键单击DLL时不会。

我的RC文件中缺少什么,以便在右键单击时显示?

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", "something Application"
            VALUE "FileVersion", "1, 0, 0, 1"
            VALUE "InternalName", "something"
            VALUE "LegalCopyright", "Copyright (C) 2008 Somebody"
            VALUE "OriginalFilename", "something.exe"
            VALUE "ProductName", "something Application"
            VALUE "ProductVersion", "1, 0, 0, 1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

4 个答案:

答案 0 :(得分:15)

我能够看到(使用reshacker)右键单击时出现的资源和资源之间的差异,这就是资源的名称。所以我把VS_VERSION_INFO改为1;现在,右键单击可见资源。

1 VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0,0,1
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "FileDescription", "something Application"
            VALUE "FileVersion", "1, 0, 0, 1"
            VALUE "InternalName", "something"
            VALUE "LegalCopyright", "Copyright (C) 2008 Somebody"
            VALUE "OriginalFilename", "something.exe"
            VALUE "ProductName", "something Application"
            VALUE "ProductVersion", "1, 0, 0, 1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

答案 1 :(得分:9)

正确的解决方案是添加到.rc文件的顶部:

#include <windows.h>

答案 2 :(得分:3)

尝试将资源更改为:

 FILEFLAGSMASK 0x3fL

    BLOCK "040004e4"

VALUE "Translation", 0x400, 1252

答案 3 :(得分:1)

根据以下内容,我将扩展@Stefan答案:StringFileInfo BLOCK statement

定义一个字符串信息块。语法

BLOCK“ StringFileInfo” {BLOCK“ lang-charset” {VALUE“ string-name”, “值”。 。 。 }}

参数

lang-charset

语言和字符集标识符对。它是一个十六进制字符串,由语言和 在“备注”部分中指定的字符集标识符。

我的情况是我使用了错误的lang-charset,这就是为什么版本详细信息未显示版本信息的原因,这是正确的:

BLOCK "040904E4"
....
BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x409, 1252
  END

Here语言代码和字符集的列表