在c++中以编程方式从DLL中获取DLL版本-再次
Getting DLL Version from within the DLL Programmatically in C++ - Again
尝试了MSDN论坛的答案&在线程中提到的答案-我如何以编程方式获得DLL或EXE文件的版本?-但我总是得到版本号为"0.0.0.0"
右键单击我的DLL ->属性->详细信息->文件版本有正确的值。加载我的DLL的EXE没有版本信息-但不确定这是否重要。
我的代码如下(作为dll的一部分)->
std::string moduleName = "<full absolute path to DLL that this code is part of>";
DWORD zero = 0;
uint32 verInfoLen = 0;
BYTE *verInfo = NULL;
VS_FIXEDFILEINFO *fileInfo = NULL;
uint32 len = 0;
/* Get the size of FileVersionInfo structure */
verInfoLen = GetFileVersionInfoSize(moduleName.c_str(), &zero);
if (verInfoLen == 0) {
printf("GetFileVersionInfoSize() Failed!");
return;
}
/* Get FileVersionInfo structure */
verInfo = new BYTE[verInfoLen];
if (!GetFileVersionInfo(moduleName.c_str(), zero, verInfoLen, verInfo)) {
printf("GetFileVersionInfo Failed!");
return;
}
/* Query for File version details. */
if (!VerQueryValue(verInfo, "\", (LPVOID *)&fileInfo, &len)) {
printf("VerQueryValue Failed!");
return;
}
/* None of the above func calls fail - but both printf below print all zeros */
printf("Version is %d.%d.%d.%d",
(fileInfo->dwProductVersionMS >> 16) & 0xff,
(fileInfo->dwProductVersionMS >> 0) & 0xff,
(fileInfo->dwProductVersionLS >> 16) & 0xff,
(fileInfo->dwProductVersionLS >> 0) & 0xff);
printf("Version is %d.%d.%d.%d",
HIWORD(fileInfo->dwProductVersionMS),
LOWORD(fileInfo->dwProductVersionMS),
HIWORD(fileInfo->dwProductVersionLS),
LOWORD(fileInfo->dwProductVersionLS));
当您应该打印FileVersion
字段时,您正在打印ProductVersion
字段:
printf("Version is %d.%d.%d.%d",
HIWORD(fileInfo->dwFileVersionMS),
LOWORD(fileInfo->dwFileVersionMS),
HIWORD(fileInfo->dwFileVersionLS),
LOWORD(fileInfo->dwFileVersionLS));
此外,如果GetFileVersionInfo()
或VerQueryValue()
失败,您的代码将泄漏verInfo
数组。
相关文章:
- 我无法从 C# 获取 PInvoke 的输入参数以C++ DLL 以用作 IntPtr 的输出
- 无法创建 DLL:获取 DLL "is not a valid Win32 application"
- 正在从jvm.dll获取FindClass函数指针
- 如何获取崩溃的DLL的堆栈跟踪?
- 如何获取 dll 注入到的进程的名称
- 我们如何从 C# 中的 DLL 中获取C++所有方法?
- 从 JNI 调用的 DLL 从哪里获取其内存以进行分配,例如 Malloc
- GetFullPathName 不会获取 DLL 路径
- 使用安全模式从DLL(通过(INTPTR)参数传递到该函数)获取char **
- 在 c++ 中,如何将 dll 获取的数据发送到 exe
- 如何从 dll 获取没有垃圾的字符串?
- (c#)从c dll获取char **时的accessViolationException
- 从X86 DLL获取导出功能
- 正在尝试从本机dll获取字符串值
- 尝试从dll获取值
- 如何从注入的 DLL 获取程序窗口
- 在没有提供IDL(用于TLB)的情况下,从COM+dll获取IDL
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 正在从DLL获取函数PTR
- 正在将char*从C++DLL获取到C#应用程序