Ресурс версии в DLL не отображается при щелчке правой кнопкой мыши

Я пытаюсь сделать что-то, что очень легко сделать в обычном MSVC, но не легко поддерживается в VC++ Express.

В VC++ Express нет редактора ресурсов. Поэтому я добавил файл с именем version.rc в свой проект DLL. Файл имеет указанное ниже содержимое, которое скомпилировано компилятором ресурсов и добавлено в окончательную DLL. Этот ресурс доступен для просмотра в DLL с помощью reshacker, но не при щелчке правой кнопкой мыши DLL в проводнике Windows.

Чего не хватает в моем файле 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

person David Resnick    schedule 12.05.2009    source источник


Ответы (4)


Правильное решение — добавить в начало вашего файла .rc:

#include <windows.h>
person MrZebra    schedule 27.03.2015
comment
#include <winres.h> достаточно - person klaus triendl; 23.10.2015

Я смог увидеть (используя 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
person David Resnick    schedule 17.05.2009
comment
Отличный улов! Я просто столкнулся с тем же самым. Предположительно символ VS_VERSION_INFO определен где-то еще, что не включается в ваш (или мой) ресурсный скрипт. - person Jim Crafton; 30.12.2010
comment
Я определил его равным 1, и теперь он работает. Спасибо! Хотел бы я найти этот ответ раньше. - person Matt Cofer; 11.11.2011
comment
Ответ Дэвида на его собственный вопрос правильный! И это отличный улов, особенно когда вы создаете файлы ресурсов без использования Visual Studio. Возможно, именно поэтому он, Джим Крафтон и я столкнулись с одной и той же проблемой. Спасибо, Дэвид! - person user1593842; 24.08.2012
comment
Стоит добавить, что rc.exe, похоже, не включен в версии VC++ Express после 2005 года... - person Greg0ry; 28.09.2014
comment
Из docs.microsoft.com: versionID Идентификатор ресурса информации о версии. Это значение должно быть 1. - person Sergey K; 07.05.2020
comment
Этот маленький недостающий 1 в начале обжигал меня много раз за эти годы, #include заявления или нет. Этот ответ действительно должен быть принятым ответом. - person Sean Werkema; 24.04.2021

Попробуйте изменить свои ресурсы на:

 FILEFLAGSMASK 0x3fL

и

    BLOCK "040004e4"

и

VALUE "Translation", 0x400, 1252
person Stefan    schedule 12.05.2009
comment
Затем узнайте, какие из ваших библиотек уже ссылаются на ресурс версии. Вы уже ссылаетесь на ресурс версии (теперь вам нужно выяснить, какой из них и какой файл/библиотека это делает). - person Stefan; 12.05.2009
comment
Попробуйте отключить добавочное связывание: Свойства проекта-›Linker-›Common-›Enable Incremental Linking. Также может помочь пересборка. - person Stefan; 12.05.2009
comment
Я удалил свои комментарии, теперь, когда вопрос был перефразирован. - person David Resnick; 13.05.2009
comment
Мне так жаль; Я переписал свой вопрос и не заметил, что вы переписали свой ответ! - person David Resnick; 17.05.2009