mfc修改版本资源时,怎么才能让新字符串的长度大于旧字符串的长度 如题,例如,我想要修改companyname,原字符串为“beishujituan”,我想要修改为“nanhuangjituan”,应该怎么弄? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接在资源编辑器修改有问题? 也可以用notepad 打开 .rc 文件直接修改 struct VS_VERSIONINFO { WORD wLength; WORD wValueLength; WORD wType; WCHAR szKey[1]; WORD wPadding1[1]; VS_FIXEDFILEINFO Value; WORD wPadding2[1]; WORD wChildren[1]; }; struct langCode{ WORD wLanguage; WORD wCodePage; }; // these macros help to align on r-byte boundaries (thanks Ted Peck) #define roundoffs(a,b,r) (((BYTE *) (b) - (BYTE *) (a) + ((r) - 1)) & ~((r) - 1)) #define roundpos(a,b,r) (((BYTE *) (a)) + roundoffs(a,b,r)) void CTest03Dlg::OnButton1() { // TODO: Add your control notification handler code here VS_VERSIONINFO *pVerInfo; LPBYTE pOffsetBytes; VS_FIXEDFILEINFO *pFixedInfo; LPTSTR lpszFile = _T("E:\\lianxi\\dll1\\Debug\\dll1.dll"); DWORD dwHandle, dwSize, dwResult = 0; struct langCode *lpTranslate = NULL; CString strSubBlock = _T(""); LPTSTR pValueBuffer; UINT uTemp; do { dwSize = GetFileVersionInfoSize(lpszFile,&dwHandle); if (0 == dwSize) break; LPBYTE lpBuffer = new BYTE[dwSize]; if (!lpBuffer) return; if (GetFileVersionInfo(lpszFile, 0, dwSize, lpBuffer) == FALSE) break; pVerInfo = (VS_VERSIONINFO *) lpBuffer; // the fixed section starts right after the 'VS_VERSION_INFO ' string pOffsetBytes = (BYTE *) &pVerInfo-> szKey[_tcslen(pVerInfo-> szKey) + 1]; pFixedInfo = (VS_FIXEDFILEINFO *) roundpos(pVerInfo, pOffsetBytes, 4); // increment the numbers! pFixedInfo-> dwFileVersionMS = pFixedInfo-> dwFileVersionMS + 0x00010001; pFixedInfo-> dwFileVersionLS = pFixedInfo-> dwFileVersionLS + 0x00010001; pFixedInfo-> dwProductVersionMS = pFixedInfo-> dwProductVersionMS + 0x00010001; pFixedInfo-> dwProductVersionLS = pFixedInfo-> dwProductVersionLS + 0x00010001; HANDLE hResource = BeginUpdateResource(lpszFile, FALSE); if (NULL == hResource) break; if (VerQueryValue(lpBuffer, _T("\\VarFileInfo\\Translation"), (LPVOID *)&lpTranslate, &uTemp) == FALSE) break; strSubBlock.Format(_T( "\\StringFileInfo\\%04x%04x\\companyName"), lpTranslate-> wLanguage, lpTranslate-> wCodePage); if (VerQueryValue(lpBuffer, (LPTSTR)((LPCTSTR)strSubBlock), (LPVOID *)&pValueBuffer, &uTemp) == FALSE) break; _tcscpy(pValueBuffer, _T( "shanghaigangtieyelianyouxiangongsi")); if (UpdateResource(hResource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), lpTranslate->wLanguage, lpBuffer, dwSize) == FALSE) break; if (EndUpdateResource(hResource, FALSE) == FALSE) break; if (lpBuffer) delete []lpBuffer; } while (FALSE); dwResult = GetLastError(); if (0 != dwResult) { MessageBox(L"!"); }} 当执行_tcscpy(pValueBuffer, _T( "shanghaigangtieyelianyouxiangongsi")); 这一步的时候,如果要复制 的字符串的长度大于原字符串的长度的话,被修改的文件的版本信息就会全部消失。 undeclared identifier? 使用mysql的c api 中文无法查询,人民币求解决 仅有的25分问个问题。。。 组件 控件 ATL怎么做一个普通的窗口,谁能给个源代码看看?? 请问!如何把CString对象作为AfxBeginThread()函数的第二个参数,如何标识 关于图形按钮的问题 关于VisualStudio的小问题? newsgroup问题(散分) 一个有关打印预览的问题 赤膊后空翻360卧冰求指导:如何用SMTP协议收发HTML邮件 谁有能从接收通达信股票软件数据数据的代码
{
WORD wLength;
WORD wValueLength;
WORD wType;
WCHAR szKey[1];
WORD wPadding1[1];
VS_FIXEDFILEINFO Value;
WORD wPadding2[1];
WORD wChildren[1];
}; struct langCode
{
WORD wLanguage;
WORD wCodePage;
}; // these macros help to align on r-byte boundaries (thanks Ted Peck)
#define roundoffs(a,b,r) (((BYTE *) (b) - (BYTE *) (a) + ((r) - 1)) & ~((r) - 1))
#define roundpos(a,b,r) (((BYTE *) (a)) + roundoffs(a,b,r))
void CTest03Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
VS_VERSIONINFO *pVerInfo;
LPBYTE pOffsetBytes;
VS_FIXEDFILEINFO *pFixedInfo;
LPTSTR lpszFile = _T("E:\\lianxi\\dll1\\Debug\\dll1.dll");
DWORD dwHandle, dwSize, dwResult = 0;
struct langCode *lpTranslate = NULL;
CString strSubBlock = _T("");
LPTSTR pValueBuffer;
UINT uTemp; do
{
dwSize = GetFileVersionInfoSize(lpszFile,&dwHandle);
if (0 == dwSize)
break;
LPBYTE lpBuffer = new BYTE[dwSize];
if (!lpBuffer)
return;
if (GetFileVersionInfo(lpszFile, 0, dwSize, lpBuffer) == FALSE)
break;
pVerInfo = (VS_VERSIONINFO *) lpBuffer;
// the fixed section starts right after the 'VS_VERSION_INFO ' string
pOffsetBytes = (BYTE *) &pVerInfo-> szKey[_tcslen(pVerInfo-> szKey) + 1];
pFixedInfo = (VS_FIXEDFILEINFO *) roundpos(pVerInfo, pOffsetBytes, 4);
// increment the numbers!
pFixedInfo-> dwFileVersionMS = pFixedInfo-> dwFileVersionMS + 0x00010001;
pFixedInfo-> dwFileVersionLS = pFixedInfo-> dwFileVersionLS + 0x00010001;
pFixedInfo-> dwProductVersionMS = pFixedInfo-> dwProductVersionMS + 0x00010001;
pFixedInfo-> dwProductVersionLS = pFixedInfo-> dwProductVersionLS + 0x00010001;
HANDLE hResource = BeginUpdateResource(lpszFile, FALSE);
if (NULL == hResource)
break;
if (VerQueryValue(lpBuffer, _T("\\VarFileInfo\\Translation"), (LPVOID *)&lpTranslate, &uTemp) == FALSE)
break;
strSubBlock.Format(_T( "\\StringFileInfo\\%04x%04x\\companyName"), lpTranslate-> wLanguage, lpTranslate-> wCodePage);
if (VerQueryValue(lpBuffer, (LPTSTR)((LPCTSTR)strSubBlock), (LPVOID *)&pValueBuffer, &uTemp) == FALSE)
break;
_tcscpy(pValueBuffer, _T( "shanghaigangtieyelianyouxiangongsi"));
if (UpdateResource(hResource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), lpTranslate->wLanguage, lpBuffer, dwSize) == FALSE)
break;
if (EndUpdateResource(hResource, FALSE) == FALSE)
break;
if (lpBuffer) delete []lpBuffer;
} while (FALSE);
dwResult = GetLastError();
if (0 != dwResult)
{
MessageBox(L"!");
}
}