如题,例如,我想要修改companyname,原字符串为“beishujituan”,我想要修改为“nanhuangjituan”,应该怎么弄?

解决方案 »

  1.   

    直接在资源编辑器修改有问题? 也可以用notepad 打开 .rc 文件直接修改
      

  2.   

    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"!");
    }
    }
      

  3.   

    当执行_tcscpy(pValueBuffer, _T( "shanghaigangtieyelianyouxiangongsi")); 这一步的时候,如果要复制 的字符串的长度大于原字符串的长度的话,被修改的文件的版本信息就会全部消失。