view plaincopy to clipboardprint?
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
MessageBox(NULL,"资源文件释放实例!","测试",MB_OK)
return 0
}
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
MessageBox(NULL,"资源文件释放实例!","测试",MB_OK)
return 0
}
编译生成MsgBox.exe,复制到工程B目录。
2、工程B为基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中,如下图:
A、切换到资源视图,在上面单机右键:
B、单击"Import...",找到刚刚工程A编译生成的MsgBox.exe文件:
C、设置导入的资源类型名,这个名称将是该函数的第三个参数,我们取资源类型名为EXE:
D、此时,资源视图中多了一个类型为:EXE,资源ID为:IDR_EXE1,如下图:
E、增加一个按钮,添加响应事件,添加成员函数BOOL ReleaseRes(CString strFileName,WORD wResID,CString strFileType),具体代码如下:
view plaincopy to clipboardprint?
HCURSOR CTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon
}
void CTestDlg::OnBtnRelease()
{
// TODO: Add your control notification handler code here
if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))
MessageBox("释放文件成功!","提示",MB_OK)
else
MessageBox("释放文件失败!","提示",MB_OK)
}
/************************************************************************/
/* 函数说明:释放资源中某类型的文件
/* 参数:新文件名、资源ID、资源类型
/* 返 回 值:成功返回TRUE,否则返回FALSE
/* By:Koma 2009.07.24 23:30
/************************************************************************/
BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType)
{
// 资源大小
DWORD dwWrite=0
// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
if ( hFile == INVALID_HANDLE_VALUE )
{
return FALSE
}
// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType)
HGLOBAL hG = LoadResource(NULL, hrsc)
DWORD dwSize = SizeofResource( NULL, hrsc)
// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL)
CloseHandle( hFile )
return TRUE
}
HCURSOR CTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon
}
void CTestDlg::OnBtnRelease()
{
// TODO: Add your control notification handler code here
if(ReleaseRes("Test.exe",(WORD)IDR_EXE1,"EXE"))
MessageBox("释放文件成功!","提示",MB_OK)
else
MessageBox("释放文件失败!","提示",MB_OK)
}
/************************************************************************/
/* 函数说明:释放资源中某类型的文件
/* 参数:新文件名、资源ID、资源类型
/* 返 回 值:成功返回TRUE,否则返回FALSE
/* By:Koma 2009.07.24 23:30
/************************************************************************/
BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType)
{
// 资源大小
DWORD dwWrite=0
// 创建文件
HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
if ( hFile == INVALID_HANDLE_VALUE )
{
return FALSE
}
// 查找资源文件中、加载资源到内存、得到资源大小
HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType)
HGLOBAL hG = LoadResource(NULL, hrsc)
DWORD dwSize = SizeofResource( NULL, hrsc)
// 写入文件
WriteFile(hFile,hG,dwSize,&dwWrite,NULL)
CloseHandle( hFile )
return TRUE
}
3、该函数是可重用类,本程序代码在VC6 + WIN SP3测试通过
显示输入资源类型因为 你插入的资源不是位图类型 将图片转换一下格式再添加就行了显示超过256色这个可以忽略 因为此时图片已经在程序里加载完成了 只是在C++里无法显示这么多色
我刚做完的这个报告 所以看到一样的问题就上来瞅瞅 觉得有用的话 记得选为满意答案喔~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)