在网上搜过到了一篇《如何从资源中释放文件》的文章,不是很懂,烦请高人解释一下,全文如下:
------------------------------------
如何从资源中释放文件
有些时候,我们的程序需要一些资源,通常都是放在和应用程序相同的文件夹下。
但是,这样做是比较不合适的。因为在移动的过程中很容易造成文件的丢失,所以,将自己的资源文件放在Resource中是比较合适的。但能够导入的资源类型比较少,有很多文件不支持,所以我们需要写些代码,从资源中释放这些文件,然后再供我们调用。当我们觉得这些文件比较重要的时候,还可以在这些文件使用完毕以后将它们删除。具体的方法见下面。
举个例子,从资源中释放一个GIF文件,然后调用。
void CMyApp::LoadPictuer()
{
CString szPic = "Welcome.gif";
CFileFind find;
if( !find.FindFile(szPic) )
g_MakeResourceFromExe(szPic,"jig",IDR_JIG1);
find.Close();
}
g_MakeResourceFromExe就是从资源中释放文件的函数,代码如下:
bool g_MakeResourceFromExe(CString szExPathName,CString szResName,int nResID)
{
HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
if(hSrc == NULL) return false;
HGLOBAL hGlobal = LoadResource(NULL,hSrc);
if(hGlobal == NULL) return false;
LPVOID lp = LockResource(hGlobal);
DWORD dwSize = SizeofResource(NULL,hSrc);
CFile file;
if(file.Open(szExPathName,C文件::modeCreate|C文件::modeWrite))
{
file.Write(lp,dwSize);
file.Close();
}
FreeResource(hGlobal);
return true;
}
g_MakeResourceFromExe函数可以直接拿来使用。但是释放出来的文件如何使用,那就要看自己怎样修改了。
-------------------------------
运行时 HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);出错,如果将“szResName”参数改为0,便没有错误了,但执行无反应,并不能释放文件。 |