2012-12-27 55 views
1

可能重复:
updating a string table with UpdateResource更新字符串表(添加多个字符串)

我试图更新通过UpdateResources一个二进制字符串表,目前,我的代码只是增加了一个单个字符串,但我希望它将多个条目添加到字符串表中。

这里是我的代码:

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,看起来我没有错过任何关键点,没有功能失败。

+0

如果你的问题是关于Windows的特定的东西,你应该表明,与标签。 –

+0

谢谢,我现在要这样做。 – James

+0

你是什么意思“添加多个条目”? '\ n'不能使它变成倍数,它在内部仍然是单一的值。你一次更新16个字符串,你的'UpdateResource'参数不反映这个并且是无效的。 –

回答

相关问题