прочитать значение FILEVERSION в коде - PullRequest
0 голосов
/ 07 июня 2018

Моя dll, встроенная в c ++, имеет файл .rc, который содержит это:

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,8,7
 PRODUCTVERSION 1,0,8,7

Я хочу прочитать значение FILEVERSION, чтобы войти в мой код .. как я могу это сделать?Я читаю что-то, но все сообщения относятся к чтению других DLL или EXE, мне нужно прочитать мою текущую DLL

спасибо

1 Ответ

0 голосов
/ 07 июня 2018

Использование GetFileVersionInfo() и VerQueryValue() - это безопасный и официальный способ чтения данных версии любого файла.DLL может получить свой собственный путь + имя файла, вызвав GetModuleFileName() с HINSTANCE, предоставленным ее DllMain() точке входа.

При этом, это более эффективно дляDLL просто считывает данные версии непосредственно из своего ресурса версии, используя (Find|Load|Lock)Resource() вместо GetFileVersionInfo().Тем не менее, есть предостережения, связанные с этим:

  • это не тот подход, который официально поддерживается Microsoft.

  • указатель памяти, который являетсяполученный из LockResouce() не может быть передан в VerQueryValue().Вы должны выделить копию блока ресурсов, а затем вы можете передать копию в VerQueryValue().

  • однако, единственной версией данных, которую можно безопасно запросить из скопированного блока ресурсов с использованием VerQueryValue(), является корневая VS_FIXEDFILEINFO структура, которая достаточно хороша для получения FileVersion и ProductVersion полей.Для запроса любых данных локализованной версии требуются исправления, которые обычно выполняются GetFileVersionInfo() и даже VerQueryValue() в координации с GetFileVersionInfo().

Существует несколько ответов на StackOverflow, которыеобъяснить, как использовать этот подход, и некоторые из них имеют фрагменты кода, в том числе:

https://stackoverflow.com/a/48577200/65863

https://stackoverflow.com/a/13942403/65863

...