读书人

怎么把一个exe文件放入资源中,在程序运

发布时间: 2012-01-29 21:39:32 作者: rapoo

如何把一个exe文件放入资源中,在程序运行后在释放出来?
如何在VC实现呢?

用的是int API WinMain()

[解决办法]
bool CKeygenDlg::Res2File(LPCTSTR lpName, LPCTSTR lpType, LPCTSTR filename)
{
HRSRC hRes = ::FindResource( NULL, lpName, lpType );
HGLOBAL gl =::LoadResource( NULL, hRes );
LPVOID lp = ::LockResource( gl );
HANDLE fp = ::CreateFile( filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
if( fp == INVALID_HANDLE_VALUE )
return FALSE;
DWORD a;
if( !::WriteFile( fp, lp, SizeofResource( NULL, hRes ), &a, NULL ) )
return FALSE;

CloseHandle( fp );
FreeResource( gl );
return TRUE;
}
[解决办法]
看看这篇文章,对你应该有帮助http://www.titilima.cn/readarticle.php?id=42
要达到你的要求,没必要和文章那样复杂,你需要的可能只是
BOOL CreateServer()
{
HRSRC hResInfo;
HGLOBAL hResData;
DWORD dwSize, dwWritten;
HANDLE hFile;
// 查找所需的资源
hResInfo = FindResource( NULL, MAKEINTRESOURCE(IDR_SERVER), "Server " );
if ( hResInfo == NULL )
return FALSE;
// 获得资源尺寸
dwSize = SizeofResource( NULL, hResInfo );
// 装载资源
hResData = LoadResource( NULL, hResInfo );
if ( hResData == NULL )
return FALSE;
// 写文件
hFile = CreateFile( "C:\\MsgBox.exe ", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL );
if ( hFile == NULL )
return FALSE;
WriteFile( hFile, (LPCVOID)LockResource( hResData ), dwSize, &dwWritten, NULL );
CloseHandle( hFile );
return TRUE;
}
具体看原文吧

读书人网 >VC/MFC

热点推荐