通过UpdateResource更新STRING TABLE(添加多个字符串)

时间:2012-12-27 12:31:22

标签: c windows winapi string-table

  

可能重复:
  updating a string table with UpdateResource

我正在尝试通过UpdateResources更新二进制文件STRING TABLE,目前,我的代码只添加一个字符串,但我希望它在字符串表中添加多个条目。

这是我的代码:

 HANDLE hRes = BeginUpdateResource("file.exe",TRUE);
    if (hRes)
    {
        char * sNewString = "Line";
        int iCharCount = (strlen(sNewString) + 1);   //sNewString.size() + 1;
        LPWSTR pUnicodeString = new WCHAR[iCharCount];
        if (!pUnicodeString)
        {
            cout << "Error" << endl;
        }
        DWORD dwUnicodeCharCount = MultiByteToWideChar(CP_ACP,NULL,sNewString,-1,pUnicodeString,iCharCount);
        HGLOBAL hGlob = GlobalAlloc(GHND,(dwUnicodeCharCount + 4) * sizeof(WCHAR));
        LPWSTR pBufStart = (LPWSTR)GlobalLock(hGlob);
        LPWSTR pBuf = pBufStart;
        pBuf++;
          // offset to make it string ID=1. Increment by more
            // to change to a different string ID
        //next 2 bytes is string length
        *(pBuf++) = (WCHAR)dwUnicodeCharCount-1;
        for (int i = 0; i < (int)dwUnicodeCharCount-1; i++)
        {
            dwUnicodeCharCount++;
        }
        delete pUnicodeString;
        if (++dwUnicodeCharCount%1) // make sure even number
        {
            dwUnicodeCharCount++;
        }
        if(!UpdateResource(hRes,RT_STRING,MAKEINTRESOURCE(1),MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
                          pBufStart, dwUnicodeCharCount * sizeof(WCHAR)))
        {
            cout << "Function failed!" << endl;
        }
        GlobalUnlock(hGlob);
        GlobalFree(hGlob);
        EndUpdateResource(hRes,FALSE);

我试图编辑`

char * sNewString = "Line";

到`

char * sNewString = "Line1\nLine2";

试图模仿换行符无济于事。

我错过了什么吗?我彻底看了http://msdn.microsoft.com/en-us/library/windows/desktop/aa381050(v=vs.85).aspx,看起来我没有错过任何关键点,也没有任何功能失败。

1 个答案:

答案 0 :(得分:0)

此问题已经过更详细的修订,并在此处得到了解答: updating a string table with UpdateResource