hur.cn - 华软网

 热门搜索

一个用PB编译生成的可执行程序,为什么在Windwos下能看到程序版本信息,在我的VC++程序中看到的却是乱码? 各位PB高手是如何根据程序版本实

  作者:未知    来源:网络    更新时间:2017/9/26
我用PB编译生成的一个可执行程序,用GetFileVersionInfoSize能得到它的版本信息,可是显示为乱码,但是在windows中右击显示属性中却正常显示.
调试时VerQueryValue(m_lpBuffer, 
              TEXT("\\VarFileInfo\\Translation"),……)显示其中的语言字符集为"04091252",
用VerQueryValue(m_lpBuffer,"\\StringFileInfo\\……)时返回0
代码如下:

m_dwHandle = 0;
m_uiDataSize = 80;
int nRet;
m_lpData = malloc(m_uiDataSize);
// Get the version information block size,
// then use it to allocate a storage buffer.
m_dwSize = ::GetFileVersionInfoSize(m_lpszImageName, &m_dwHandle);
if(!nRet)
{
AfxMessageBox("调用GetFileVersionInfoSize出错");
return ;
}
m_lpBuffer = malloc(m_dwSize);
// Get the versioninformation block
nRet=::GetFileVersionInfo(m_lpszImageName, 0, m_dwSize, m_lpBuffer);
if(!nRet)
{
AfxMessageBox("调用GetFileVersionInfo出错");
return ;
}

int i;
UINT nLen;
memset(m_szLangCodePage,0,1024);
VerQueryValue(m_lpBuffer, 
              TEXT("\\VarFileInfo\\Translation"),
              (LPVOID*)&lpTranslate,
              &nLen);
// Read the file description for each language and code page.
int nLoop;
nLoop=((nLen)/sizeof(struct LANGANDCODEPAGE));
for( i=0; i < nLoop; i++ )
{
wsprintf( m_szLangCodePage, 
TEXT("%04x%04x"),
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
  break;//如果有多个语言字符集,则应该继续
 
}


//读取公司信息
CString strCompany;
m_lpData=NULL;
char szTmp[2048];
strcpy(szTmp,"\\StringFileInfo\\");
strcat(szTmp,m_szLangCodePage);
strcat(szTmp,"\\CompanyName");
int nRet;
nRet=::VerQueryValue(m_lpBuffer,
            szTmp,
&m_lpData,
&m_uiDataSize);
if(!nRet)  //此处 nRet=0 ?
return "";
strCompany.Format("%s", m_lpData);
m_lpData=NULL;
return strCompany;

------华软网友回答------
是你的程序写得有问题吧


升级程序用PB写都可以

如果想简单点就在表中加个版本号字段(自己约定一下了)

然后根据版本判断是否要升级
------华软网友回复------
应该不是程序的问题.
因为它可以看许多其它程序的版本信息.如VC,VB,delphi等
------华软网友回复------
升级程序用PB写都可以?
如何写啊?
加字段或配置文件太不专业了吧
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。