获取 C++ 中的 DLL 版本

Posted

技术标签:

【中文标题】获取 C++ 中的 DLL 版本【英文标题】:Obtain DLL version in C++ 【发布时间】:2015-07-01 22:53:57 【问题描述】:

有人能指出一个函数来简单地使用 C++ 代码从 DLL 文件中获取版本号吗?我知道 Windows 有这些信息,因为我可以右键单击文件、查看属性并查看版本。我只需要在 C++ 中以编程方式检索版本。

【问题讨论】:

你应该向我们展示的想法!! 【参考方案1】:

您想使用GetFileVersionInfo WinAPI 函数。下面是一个稍微修改过的工作example 的使用。它将在详细信息页面上打印版本。您只需使用 ie 包含 vector 和 windows.h 的标头,并包含 version.lib。编译指示:#pragma comment(lib, "version.lib")

LPTSTR lpszFilePath = L"d:\\AcroRd32.dll";

DWORD dwDummy;
DWORD dwFVISize = GetFileVersionInfoSize(lpszFilePath, &dwDummy);

std::vector<BYTE> versionInfoVec(dwFVISize);

GetFileVersionInfo(lpszFilePath, 0, dwFVISize, versionInfoVec.data());

UINT uLen;
VS_FIXEDFILEINFO *lpFfi;

VerQueryValue(versionInfoVec.data(), _T("\\"), (LPVOID *)&lpFfi, &uLen);

DWORD dwFileVersionMS = lpFfi->dwFileVersionMS;
DWORD dwFileVersionLS = lpFfi->dwFileVersionLS;

DWORD dwLeftMost = HIWORD(dwFileVersionMS);
DWORD dwSecondLeft = LOWORD(dwFileVersionMS);
DWORD dwSecondRight = HIWORD(dwFileVersionLS);
DWORD dwRightMost = LOWORD(dwFileVersionLS);

std::cout << dwLeftMost << "." << dwSecondLeft << "."
    << dwSecondRight << "." << dwRightMost << std::endl;

【讨论】:

谢谢。这非常有帮助,并为我提供了我需要的信息。不幸的是我没有 有足够的声誉来投票你的答案,但我还是感谢你 不要忘记对每个 API 调用进行错误检查。此外,一些 DLL 会导出 DllGetVersion() 函数,因此您可以考虑在使用 GetFileVersionInfo() 之前检查它。

以上是关于获取 C++ 中的 DLL 版本的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 应用程序加载 dll

如何在 C++ 中构建与运行时版本无关的 DLL?

在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?

VS2013编写了个c++的dll动态库,怎么填写文件说明,版本,版权这些信息

将 C# 字符串传递给 C++ dll 在发布版本中失败

获取dll版本信息