首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

c++ builder6.0解决办法

2013-08-01 
c++ builder6.0bcb 6.0 ,怎么获取软件自身的版本信息?请教大侠![解决办法]楼上的代码有安全隐患,首先开辟

c++ builder6.0
bcb 6.0 ,怎么获取软件自身的版本信息?请教大侠!
[解决办法]
楼上的代码有安全隐患,首先开辟的缓冲大小,至少应该是所需要大小+1,然后应该给字符串结尾补0x0,以防AV。
[解决办法]
void GetAPPVersion_void(char chVersion[])
{
TCHAR szModule[_MAX_PATH];
GetModuleFileName(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径

int iVerInfoSize = 0;
char *pBuf = NULL;
VS_FIXEDFILEINFO *pVsInfo;
unsigned int iFileInfoSize = sizeof(VS_FIXEDFILEINFO);
iVerInfoSize = GetFileVersionInfoSize(szModule,0);
if(iVerInfoSize!= 0)
{
pBuf = new char[iVerInfoSize];

if(GetFileVersionInfo(szModule,0,iVerInfoSize,pBuf))
{
if(VerQueryValue(pBuf,"\",(void **)&pVsInfo,&iFileInfoSize))
{
sprintf(chVersion,"%d.%d.%d.%d",
HIWORD(pVsInfo->dwFileVersionMS),
LOWORD(pVsInfo->dwFileVersionMS),
HIWORD(pVsInfo->dwFileVersionLS),
LOWORD(pVsInfo->dwFileVersionLS));
}
}
}
delete []pBuf;
pBuf = NULL;
}

[解决办法]
老妖说得是,改两笔


String __fastcall TForm1::GetVersion()
{
   String res = "0.0.0.0";
   DWord VerInfoSize,Dummy;
   UINT VerValueSize;
   PVSFixedFileInfo VerValue;

   String sExe = Application->ExeName;
   VerInfoSize = GetFileVersionInfoSize(sExe.c_str(),&Dummy);
   if (0 != VerInfoSize) VerInfoSize++;
        else  return res;

   char* VerInfo = new char[VerInfoSize];
   memset(VerInfo, 0, VerInfoSize);
   GetFileVersionInfo(ParamStr(0).c_str(), 0,VerInfoSize, VerInfo);
   VerQueryValue(VerInfo,"\", (void**)&VerValue,  &VerValueSize);

   VerValue->dwProductVersionMS = VerValue->dwFileVersionMS;
   VerValue->dwProductVersionLS = VerValue->dwFileVersionLS;


   TVarRec args[4];
   args[0].VInteger = VerValue->dwProductVersionMS >> 0x10;
   args[1].VInteger = VerValue->dwProductVersionMS & 0xffff;
   args[2].VInteger = VerValue->dwProductVersionLS >> 0x10;
   args[3].VInteger = VerValue->dwProductVersionLS & 0xffff;

   res = res.Format("%d.%d.%d.%d",args,4);
   delete[] VerInfo;
   return res;
}

热点排行