获取 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 版本的主要内容,如果未能解决你的问题,请参考以下文章
在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?