beyard

常用链接

统计

最新评论

【转】在vc中将文件作为资源放入程序中,根据需要再还原为文件

在vc中将文件作为资源放入程序中,待需要使用时将其释放调用,可以将*.exe、*.dll、*.bat、音乐等作为资源。

1. 导入文件资源:点击插入->资源->自定义,输入“bin”,然后在资源视图中右击,点击 引入,选择需要添加的文件,在跳出的“自定义资源类型”对话框中输入“bin”,确定。这样文件就作为资源添加进来了,可以修改该资源的ID号,这里改为“IDR_BIN_TEST”.

2. 释放该资源:

void CXXXDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
DWORD dwWritten = 0; 
HMODULE hInstance = ::GetModuleHandle(NULL);
HRSRC hSvcExecutableRes = ::FindResource(hInstance, 
   MAKEINTRESOURCE(IDR_BIN_TEST),
   _T("BIN") );
HGLOBAL hSvcExecutable = ::LoadResource(hInstance, hSvcExecutableRes); 
LPVOID pSvcExecutable = ::LockResource(hSvcExecutable ); 
if(pSvcExecutable == NULL)
{
//   AfxMessageBox("psvcexecutable错误!");
   return; 
}
DWORD dwSvcExecutableSize = ::SizeofResource(hInstance,hSvcExecutableRes);
TCHAR szSvcExePath[_MAX_PATH]; 
   strcpy(szSvcExePath,"c://test.exe");
HANDLE hFileSvcExecutable = CreateFile(szSvcExePath,
   GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
if ( hFileSvcExecutable == INVALID_HANDLE_VALUE ) 
{
//   AfxMessageBox("错误2");
   return ; 
}
WriteFile( hFileSvcExecutable, pSvcExecutable, dwSvcExecutableSize, &dwWritten, NULL ); 
CloseHandle( hFileSvcExecutable );   
}

这样该资源就被释放到c盘下了,保存为test.exe,当需要调用它时可以用ShellExecute、WinExec、ShellExec、CreateProcess等函数。

如可以通过下面的语句进行调用:
 ShellExecute(NULL,"open","c://test.exe",NULL,NULL,SW_SHOWNORMAL);

posted on 2014-12-09 19:29 阅读(267) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理