Моя dll, встроенная в c ++, имеет файл .rc, который содержит это:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,8,7
PRODUCTVERSION 1,0,8,7
Я желаю прочитать FILEVERSION
значение для входа в мой код ..
Как я могу сделать?
Я читаю что-то, но все сообщения относятся к чтению других DLL или EXE, мне нужно прочитать мою текущую DLL
Спасибо
С помощью 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 есть несколько ответов, объясняющих, как использовать этот подход, и некоторые из них имеют фрагменты кода, в том числе:
Других решений пока нет …