читать значение FILEVERSION в коде

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

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

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

Спасибо

0

Решение

С помощью 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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]