我试图使用此功能来获取任何文件的版本,但我的问题是当我将其显示为spade的值时。我知道我在屏幕上打印价值的方式并没有错,所以它必须是我的功能内部的东西....我只是不知道它可能是什么。我尝试从CompleteVer的字符串更改为char数组,但是存在一些问题。
string GetFileVersion(HANDLE hprocess)
{
VS_FIXEDFILEINFO* FFI;
UINT FFISize;
BYTE* VersionInfo;
char Path[MAX_PATH];
int VersionSeg[4] = {0};
string CompleteVer;
if(GetModuleFileNameEx(hprocess,0,Path,sizeof(Path)))
if(int FilePropSize = GetFileVersionInfoSize(Path,0))
{
VersionInfo = new BYTE[FilePropSize];
if(GetFileVersionInfo(Path,0,FilePropSize,VersionInfo))
if(VerQueryValue(VersionInfo,"\\",(void**)&FFI,&FFISize))
{
VersionSeg[0] = HIWORD(FFI->dwFileVersionMS);
VersionSeg[1] = LOWORD(FFI->dwFileVersionMS);
VersionSeg[2] = HIWORD(FFI->dwFileVersionLS);
VersionSeg[3] = LOWORD(FFI->dwFileVersionLS);
delete[] VersionInfo;
for(int x = 0;x < 4;x++)
{
CompleteVer += VersionSeg[x];
}
return CompleteVer;
}
else
return "3";
}
else
return "2";
else
return "1";
}
输出:♠
答案 0 :(得分:0)
看起来你正在从结构中获取一些int
值并将它们附加到字符串而不先转换为字符。如果您抓取的值是ASCII,那么您应该将VersionSeg
声明为char [4]
,如果不是,则需要执行添加'0'
之类的操作。当你在它的时候检查它们是否小于10的十进制数字。