exe读写资源

msdn资源使用

1 加载资源

#define MY_RES 100

void add_res() 
{
	FILE * fp = fopen("1.exe", "rb");
	fseek(fp, 0, SEEK_END);
	DWORD l_file_len = ftell(fp); 
	rewind(fp);
	char * pBuffer = new char[l_file_len];
	
	long r = fread(pBuffer, 1, l_file_len, fp);
	assert(r == l_file_len);
	fclose(fp);
	
	HANDLE hUpdate = ::BeginUpdateResource(_T("CustomResource.exe", FALSE));
	if(hUpdate == NULL){
		goto end;
	}
	BOOL bRet = ::UpdateResource(hUpdate, RT_RCDATA, MAKEINTRESOURCE(MY_RES), MAKELANGID(LANG_NEUTRAL, LANG_NEUTRAL),
              pBuffer, l_file_len);
	::EndUpdateResource(hUpdate, FALSE);
	delete [] pBuffer;
}

2 读资源

void CCustomResourceDlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	HRSRC hRes = ::FindResource(NULL, MAKEINTRESOURCE(MY_RES), RT_RCDATA);
	if(hRes == NULL){
		return;
	}
	DWORD dwSize = SizeofResource(NULL, hRes);
	if(dwSize == 0){
		return;
	}
	
	HGLOBAL hGlobal = ::LoadResource(NULL, hRes);
	if(hGlobal == NULL){
		return;
	}
	void * pBuffer = ::LockResource(hGlobal);
	if(pBuffer == NULL){
		return;
	}
	::UnlockResource(hGlobal);
	::FreeResource(hRes);	
	
	FILE * fp = fopen("target.exe", "wb");
	if( fp == NULL )
		return;
	fwrite(pBuffer, 1, dwSize, fp);
	fclose(fp);
}

windows官网

HGLOBAL hResLoad;   // handle to loaded resource
HMODULE hExe;       // handle to existing .EXE file
HRSRC hRes;         // handle/ptr. to res. info. in hExe
HANDLE hUpdateRes;  // update resource handle
LPVOID lpResLock;   // pointer to resource data
BOOL result;
#define IDD_HAND_ABOUTBOX   103
#define IDD_FOOT_ABOUTBOX   110

// Load the .EXE file that contains the dialog box you want to copy.
hExe = LoadLibrary(TEXT("hand.exe"));
if (hExe == NULL)
{
    ErrorHandler(TEXT("Could not load exe."));
    return;
}

// Locate the dialog box resource in the .EXE file.
hRes = FindResource(hExe, MAKEINTRESOURCE(IDD_HAND_ABOUTBOX), RT_DIALOG);
if (hRes == NULL)
{
    ErrorHandler(TEXT("Could not locate dialog box."));
    return;
}

// Load the dialog box into global memory.
hResLoad = LoadResource(hExe, hRes);
if (hResLoad == NULL)
{
    ErrorHandler(TEXT("Could not load dialog box."));
    return;
}

// Lock the dialog box into global memory.
lpResLock = LockResource(hResLoad);
if (lpResLock == NULL)
{
    ErrorHandler(TEXT("Could not lock dialog box."));
    return;
}

// Open the file to which you want to add the dialog box resource.
hUpdateRes = BeginUpdateResource(TEXT("foot.exe"), FALSE);
if (hUpdateRes == NULL)
{
    ErrorHandler(TEXT("Could not open file for writing."));
    return;
}

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

if (result == FALSE)
{
    ErrorHandler(TEXT("Could not add resource."));
    return;
}

// Write changes to FOOT.EXE and then close it.
if (!EndUpdateResource(hUpdateRes, FALSE))
{
    ErrorHandler(TEXT("Could not write changes to file."));
    return;
}

// Clean up.
if (!FreeLibrary(hExe))
{
    ErrorHandler(TEXT("Could not free executable."));
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值