VC获得程序自身的版本号

操作系统: Windows7 64位

运行环境: Visual Studio 10

文件编码: Unicode


char* GetLocalPogramVersion()
{
	TCHAR pFilePath[MAX_PATH] = {0};     
	DWORD dwRet = GetModuleFileName(NULL, pFilePath, MAX_PATH); 
	if(dwRet == 0)
	{
		TRACE("h获取程序的文件路径失败,错误码:%s\n",GetLastError());
		return "";
	}
	TRACE("程序自身的全路径:%s\n",pFilePath);

	//获取版本信息大小
	DWORD dwSize = GetFileVersionInfoSize(pFilePath,NULL); 
	if (dwSize == 0) 
	{ 
		TRACE("获取版本资源长度失败,文件不包含版本信息,错误码:%d\n",GetLastError()); 
		return "";
	}

	TCHAR *pBuf = (TCHAR *)malloc(dwSize + 1); 
	memset(pBuf, 0, dwSize + 1);

	//获取版本信息
	DWORD dwRtn = GetFileVersionInfo(pFilePath,NULL, dwSize, pBuf); 
	if(dwRtn == 0) 
	{ 
		TRACE("获取文件版本信息失败,错误码:%d\n",GetLastError()); 
		return "";
	}

	LPVOID lpBuffer = NULL;
	UINT uLen = 0;

	dwRtn = VerQueryValue(pBuf, TEXT("\\StringFileInfo\\080404b0\\FileVersion"), &lpBuffer, &uLen); 
	if(dwRtn == 0) 
	{ 
		delete pBuf; 
		TRACE("请求的程序版本信息不存在。\n");
		return "";	 
	}

	int iLen = 2*wcslen((TCHAR*)lpBuffer);//CString,TCHAR汉字算一个字符,因此不用普通计算长度   
	char* chRtn = (char *)malloc(iLen+1); 
	memset(chRtn,0,iLen+1);
	wcstombs(chRtn,(TCHAR*)lpBuffer,iLen+1);//转换成功返回为非负值

	char* strVersion = (char *)malloc(iLen+1); 
	memset(strVersion,0,iLen+1);
	strcpy(strVersion, chRtn);
	delete pBuf;

	TRACE("程序版本号:%s\n",strVersion);	

	return strVersion;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值