// Test003.cpp : 定义应用程序的入口点。
#include "stdafx.h"
#include "Test003.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define MAX_LOADSTRING 100
//此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
DWORD GetResourceFile( HMODULE hMod,UINT nID, LPCTSTR lpszType, LPVOID lpResAddr, INT nSize);
bool replace(TCHAR* buffer);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
int len = GetResourceFile( hInstance,IDR_POP1, L"POP", NULL, 0);
LPBYTE buffer = new BYTE[len + 1];
len = GetResourceFile( hInstance,IDR_POP1, L"POP", (LPVOID)buffer, len+1);
replace((TCHAR*)buffer);
delete [] buffer;
}
bool replace(TCHAR* buffer)
{
wstring s1(buffer); //将内存区域中的内容放入字符串s1中
TCHAR cref[3]= {0x0d,0x0a};
FILE* pfin = _tfopen(L"D:\\txt.rc", L"wb");
if(!pfin)
{
return false;
}
memset(pfin,s1.size(),0);
int idx = 0;
while(idx != string::npos )//字符串循环
{
int idx0 = idx;
idx = s1.find(cref,idx0);
if(idx == idx0)
{
idx = s1.find(cref,idx0+sizeof(TCHAR)*2);
}
if(idx != string::npos)
{
wstring line = s1.substr(idx0,idx - idx0);
int idx2 = line.find(L"TODO: ");
if(idx2 != string::npos)
{
line.replace(idx2,11,L"");
}
int idx3 = line.find(L"TODO: ");
if(idx3 != string::npos)
{
line.replace(idx3,12,L"");
}
int idx4 = line.find(L"TODO: ");
if(idx4 != string::npos)
{
line.replace(idx4,11,L"test.exe");
}
fwrite(line.c_str(), 1, line.length()*sizeof(TCHAR),pfin);
}
}
fclose(pfin);
}
DWORD GetResourceFile( HMODULE hMod,UINT nID, LPCTSTR lpszType, LPVOID lpResAddr, INT nSize)
{
HRSRC hRSrc = NULL;
hRSrc = FindResource(hMod,(LPCTSTR)nID, lpszType);
if(hRSrc == NULL)
{
return 0;
}
HGLOBAL hGlobal = NULL;
hGlobal = LoadResource(hMod, hRSrc);
if(hGlobal == NULL)
{
return 0;
}
LPVOID lpResPtr = LockResource(hGlobal);
if(lpResPtr == NULL)
{
return 0;
}
DWORD len = SizeofResource(hMod, hRSrc);
if (lpResAddr != NULL && (DWORD)nSize >= len)
{
memset( lpResAddr, 0x00, nSize);
memcpy( lpResAddr, lpResPtr, len);
}
return len;
}
更改版本信息测试
最新推荐文章于 2021-08-10 14:21:23 发布