请教将一个二进制文件以资源的方式导入程序后等需要使用时应该如何处理?
我将一个二进制文件(*.bin)以资源的方式导入程序,类型名为"rc"。我需要在程序执行时导出这个二进制文件并还原为*.bin然后再将它复制到指定的文件夹里去。我的做法是这样的:
HINSTANCE hLib = LoadLibraryEx("tmp.exe", NULL, LOAD_LIBRARY_AS_DATAFILE);
HRSRC hRsrc = FindResource(hLib, MAKEINTRESOURCE(IDR_RC1), RT_RCDATA);
HGLOBAL hGlobal = LoadResource(hLib, hRsrc);
LPVOID binfile = LockResource(hGlobal);
上面的"tmp.exe"就是此二进制文件所在的主程序的名称,但接下来我就不知道该如何做了,希望各位指教,谢谢!
问题点数:50、回复次数:4Top
1 楼rainbowinfog(朝夕)回复于 2003-11-01 22:59:19 得分 25
从资源中提取文件LoadFile函数如下:
UINT LoadFile(WORD id, char*& pData)
{
HRSRC hResInfo = NULL;
pData = NULL;
LPVOID pResData = NULL;
HGLOBAL hResData = NULL;
HMODULE hModule = NULL;
UINT nSize = 0;
hModule = GetModuleHandle(NULL);
hResInfo = FindResource(hModule, MAKEINTRESOURCE(id), "BIN");//BIN这种资源类型事先要注册。
if(hResInfo)
{
hResData = LoadResource(hModule, hResInfo);
nSize = SizeofResource(hModule, hResInfo);
if(hResData && nSize>0)
{
LPVOID pResData = LockResource(hResData);
pData = new char[nSize+1];
memset(pData, 0, nSize+1);
memcpy(pData, pResData, nSize);
UnlockResource(hResData);
}
}
return nSize;
}
调用的时候这样:
nSize = LoadFile(IDR_BIN1, pFileData);
if(nSize > 0)
{
HANDLE hFile=CreateFile(szBinname,
GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
DWORD dwWritten;
WriteFile(hFile, (LPVOID)pFileData,nSize,&dwWritten,NULL);
CloseHandle(hFile);
delete pFileData;
pFileData = NULL;
nSize = 0;
}
}Top
2 楼zjlgigi(外星人)回复于 2003-11-01 23:04:50 得分 25
你已经完成了开始的工作了
binfile就是指向你的资源
你可以考虑以下这样做:
FILE *fp=fopen("test.bin","wb+");
while (bin的size > i )
{
fprintf(fp,(char)*binfile);
...
binfile++;
}
fclose(fp);Top
3 楼Saimen(沉默是金)回复于 2003-11-01 23:13:43 得分 0
楼上的说的不错Top
4 楼finalcrasher(河豚)回复于 2003-11-02 09:39:40 得分 0
非常感谢大家!Top




