14

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

VC++ Express 中没有资源编辑器。所以我在我的 DLL 项目中添加了一个名为 version.rc 的文件。该文件有以下内容,由资源编译器编译并添加到最终的DLL中。此资源可使用 reshacker 在 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

4 回答 4

20

我能够看到(使用 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
于 2009-05-17T08:30:06.250 回答
13

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

#include <windows.h>
于 2015-03-27T20:35:24.610 回答
4

尝试将您的资源更改为:

 FILEFLAGSMASK 0x3fL

    BLOCK "040004e4"

VALUE "Translation", 0x400, 1252
于 2009-05-12T13:54:02.833 回答
1

我将扩展@Stefan 的答案,根据:StringFileInfo BLOCK 语句

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

块“字符串文件信息”{块“语言字符集”{VALUE“字符串名称”,“值”。. . }}

参数

语言字符集

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

我的情况是我用错了lang-charset,这就是版本详细信息没有显示版本信息的原因,这是正确的:

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

这里是语言代码和字符集的列表

于 2020-08-15T04:44:39.247 回答