读取代码中的FILEVERSION值 我在C++中构建的DLL有一个.RC文件,包含: VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,8,7 PRODUCTVERSION 1,0,8,7
我希望阅读读取代码中的FILEVERSION值 我在C++中构建的DLL有一个.RC文件,包含: VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,8,7 PRODUCTVERSION 1,0,8,7,c++,visual-studio-2015,fileversioninfo,C++,Visual Studio 2015,Fileversioninfo,我希望阅读FILEVERSION值以登录到我的代码中。。 我该怎么办? 我读了一些东西,但是所有的帖子都是相对读其他dll或exe的,我需要读我当前的dll 感谢使用GetFileVersionInfo()和VerQueryValue()是读取任何文件版本数据的安全而正式的方式。DLL可以通过调用GetModuleFileName()并使用提供给其DllMain()入口点的HINSTANCE来获取自己的路径和文件名 也就是说,使用(Find | Load | Lock)resource()。但是
FILEVERSION
值以登录到我的代码中。。
我该怎么办?
我读了一些东西,但是所有的帖子都是相对读其他dll或exe的,我需要读我当前的dll
感谢使用
GetFileVersionInfo()
和VerQueryValue()
是读取任何文件版本数据的安全而正式的方式。DLL可以通过调用GetModuleFileName()
并使用提供给其DllMain()
入口点的HINSTANCE
来获取自己的路径和文件名
也就是说,使用(Find | Load | Lock)resource()。但是,这样做需要注意:
- 这不是微软官方支持的方法
- 从
LockResource()
获取的内存指针。必须分配资源块的副本,然后才能将副本传递到VerQueryValue()
- 但是,您可以使用
VerQueryValue()
从复制的资源块安全地查询的唯一版本数据是根VS_FIXEDFILEINFO
结构,该结构足以获取FileVersion
和ProductVersion
字段。查询任何本地化版本数据都需要通常由GetFileVersionInfo()
执行的修复,甚至是VerQueryValue()
本身与GetFileVersionInfo()
协调执行的修复
关于StackOverflow,有几个答案解释了如何使用这种方法,其中一些答案有代码片段,包括:
使用GetFileVersionInfo()
和VerQueryValue()
是读取任何文件版本数据的安全而正式的方法。DLL可以通过调用GetModuleFileName()
并使用提供给其DllMain()
入口点的HINSTANCE
来获取自己的路径和文件名
也就是说,使用(Find | Load | Lock)resource()。但是,这样做需要注意:
- 这不是微软官方支持的方法
- 从
LockResource()
获取的内存指针。必须分配资源块的副本,然后才能将副本传递到VerQueryValue()
- 但是,您可以使用
VerQueryValue()
从复制的资源块安全地查询的唯一版本数据是根VS_FIXEDFILEINFO
结构,该结构足以获取FileVersion
和ProductVersion
字段。查询任何本地化版本数据都需要通常由GetFileVersionInfo()
执行的修复,甚至是VerQueryValue()
本身与GetFileVersionInfo()
协调执行的修复
关于StackOverflow,有几个答案解释了如何使用这种方法,其中一些答案有代码片段,包括:
读取您自己的版本资源比读取其他文件的资源要简单得多。无法获取未找到的文件错误。GetFileVersionInfo()需要路径,请使用GetModuleFileName()获取路径。您需要的HMODULE在DllMain()中传递给您。如果使用宏创建.rc文件,则根本不需要它。Google“use macro to set.rc file version number”(使用宏设置.rc文件版本号)提供提示。谢谢,但我没有设置文件版本,但请阅读是的,这是显而易见的。“根本不需要它”角度是一种不必使用GetFileVersionInfo()的方式。未写入的代码永远不会失败,也不必维护。@ghiboz如果您使用.h
文件中的预处理器定义来指定.rc
文件中的版本号,您也可以在.cpp
代码中使用相同的.h
文件,这样,您就不需要在运行时动态查询版本号,它们在编译时就已经可供您的代码使用了。我想这就是Hans暗示的,阅读自己的版本资源比阅读其他文件的资源要简单得多。无法获取未找到的文件错误。GetFileVersionInfo()需要路径,请使用GetModuleFileName()获取路径。您需要的HMODULE在DllMain()中传递给您。如果使用宏创建.rc文件,则根本不需要它。Google“use macro to set.rc file version number”(使用宏设置.rc文件版本号)提供提示。谢谢,但我没有设置文件版本,但请阅读是的,这是显而易见的。“根本不需要它”角度是一种不必使用GetFileVersionInfo()的方式。未写入的代码永远不会失败,也不必维护。@ghiboz如果您使用.h
文件中的预处理器定义来指定.rc
文件中的版本号,您也可以在.cpp
代码中使用相同的.h
文件,这样,您就不需要在运行时动态查询版本号,它们在编译时就已经可供您的代码使用了。我想这就是汉斯暗示的