现exe文件中有两个字符串资源,利用以下代码只能修改一个,
MAKEINTRESOURCE(1)好像标明的是一类string table,可我的一个string table中
有两个字符串资源,不知道如何修改,求助中。
void CReMqlDlg::Reflash(char *EnData, int sID)
{
int i;
BOOL result;
HANDLE hUpdateRes;
char *sNewString; sNewString = EnData;
    hUpdateRes=BeginUpdateResource(m_file.GetBuffer(0),false);
if(hUpdateRes==NULL)
{
MessageBox("Open file error!");
return;
}


sNewString[ strlen(EnData)] = '\0';
int iCharCount=strlen(sNewString)+1;
LPWSTR pUnicodeString =new WCHAR[iCharCount];
DWORD dwUnicodeCharCount=
MultiByteToWideChar(CP_ACP,NULL,sNewString,-1,pUnicodeString,iCharCount);



HGLOBAL hglob=GlobalAlloc(GHND,(dwUnicodeCharCount+4) * sizeof(WCHAR));
if(!hglob)
{
delete pUnicodeString;
}
LPWSTR pBufStart=(LPWSTR)GlobalLock(hglob);
if(!pBufStart)
{
GlobalFree(hglob);
delete pUnicodeString;
}
LPWSTR pBuf=pBufStart;
pBuf++;
*(pBuf++)=(WCHAR)dwUnicodeCharCount-1;
for(i=0;i<(int)dwUnicodeCharCount-1;i++)
*(pBuf++)=pUnicodeString[i];



delete pUnicodeString;
if(++dwUnicodeCharCount%1)
dwUnicodeCharCount++;
BOOL bSccess=TRUE;
dwUnicodeCharCount++;     
result=UpdateResource(hUpdateRes,
RT_STRING,                      
MAKEINTRESOURCE(sID),
MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),
pBufStart+20,
dwUnicodeCharCount * sizeof(WCHAR));
if (result==FALSE)

MessageBox("error:can not add resource!");
return;

}
GlobalUnlock(hglob);
GlobalFree(hglob);

if (!EndUpdateResource(hUpdateRes,FALSE)) 
{
MessageBox("error:can not write changes to this file!");
return;

}
}

解决方案 »

  1.   

    这是MSDN上的,看对你有没有帮助。HRSRC hResLoad;     // handle to loaded resource 
    HANDLE hExe;        // handle to existing .EXE file 
    HRSRC hRes;         // handle/ptr. to res. info. in hExe 
    HANDLE hUpdateRes;  // update resource handle 
    char *lpResLock;    // pointer to resource data 
    BOOL result; 
    // Load the .EXE file that contains the dialog box you want to copy. 
    hExe = LoadLibrary("hand.exe"); 
    if (hExe == NULL) 

        ErrorHandler("Could not load exe."); 

     
    // Locate the dialog box resource in the .EXE file. 
    hRes = FindResource(hExe, "AboutBox", RT_DIALOG); 
    if (hRes == NULL) 

        ErrorHandler("Could not locate dialog box."); 

     
    // Load the dialog box into global memory. 
    hResLoad = LoadResource(hExe, hRes); 
    if (hResLoad == NULL) 

        ErrorHandler("Could not load dialog box."); 

     
    // Lock the dialog box into global memory. 
    lpResLock = LockResource(hResLoad); 
    if (lpResLock == NULL) 

        ErrorHandler("Could not lock dialog box."); 

     
    // Open the file to which you want to add the dialog box resource. 
    hUpdateRes = BeginUpdateResource("foot.exe", FALSE); 
    if (hUpdateRes == NULL) 

        ErrorHandler("Could not open file for writing."); 

     
    // Add the dialog box resource to the update list. 
    result = UpdateResource(hUpdateRes,       // update resource handle 
         RT_DIALOG,                   // change dialog box resource 
         "AboutBox",                  // dialog box name 
         MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),  // neutral language
         lpResLock,                   // ptr to resource info 
         SizeofResource(hExe, hRes)); // size of resource info. 
    if (result == FALSE) 

        ErrorHandler("Could not add resource."); 

     
    // Write changes to FOOT.EXE and then close it. 
    if (!EndUpdateResource(hUpdateRes, FALSE)) 

        ErrorHandler("Could not write changes to file."); 

     
    // Clean up. 
    if (!FreeLibrary(hExe)) 

        ErrorHandler("Could not free executable."); 

      

  2.   

    HRSRC hResLoad;     // handle to loaded resource 
    HANDLE hExe;        // handle to existing .EXE file 
    HRSRC hRes;         // handle/ptr. to res. info. in hExe 
    HANDLE hUpdateRes;  // update resource handle 
    char *lpResLock;    // pointer to resource data 
    BOOL result; 
    // Load the .EXE file that contains the dialog box you want to copy. 
    hExe = LoadLibrary("hand.exe"); 
    if (hExe == NULL) 

        ErrorHandler("Could not load exe."); 

     
    // Locate the dialog box resource in the .EXE file. 
    hRes = FindResource(hExe, "AboutBox", RT_DIALOG); 
    if (hRes == NULL) 

        ErrorHandler("Could not locate dialog box."); 

     
    // Load the dialog box into global memory. 
    hResLoad = LoadResource(hExe, hRes); 
    if (hResLoad == NULL) 

        ErrorHandler("Could not load dialog box."); 

     
    // Lock the dialog box into global memory. 
    lpResLock = LockResource(hResLoad); 
    if (lpResLock == NULL) 

        ErrorHandler("Could not lock dialog box."); 

     
    // Open the file to which you want to add the dialog box resource. 
    hUpdateRes = BeginUpdateResource("foot.exe", FALSE); 
    if (hUpdateRes == NULL) 

        ErrorHandler("Could not open file for writing."); 

     
    // Add the dialog box resource to the update list. 
    result = UpdateResource(hUpdateRes,       // update resource handle 
         RT_DIALOG,                   // change dialog box resource 
         "AboutBox",                  // dialog box name 
         MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),  // neutral language
         lpResLock,                   // ptr to resource info 
         SizeofResource(hExe, hRes)); // size of resource info. 
    if (result == FALSE) 

        ErrorHandler("Could not add resource."); 

     
    // Write changes to FOOT.EXE and then close it. 
    if (!EndUpdateResource(hUpdateRes, FALSE)) 

        ErrorHandler("Could not write changes to file."); 

     
    // Clean up. 
    if (!FreeLibrary(hExe)) 

        ErrorHandler("Could not free executable."); 
    }