Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取代码中的FILEVERSION值 我在C++中构建的DLL有一个.RC文件,包含: VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,8,7 PRODUCTVERSION 1,0,8,7_C++_Visual Studio 2015_Fileversioninfo - Fatal编程技术网

读取代码中的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文件,这样,您就不需要在运行时动态查询版本号,它们在编译时就已经可供您的代码使用了。我想这就是汉斯暗示的