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