以下代码执行,但它只提取一个空位图文件。关于它有什么问题的任何想法?
void Extract(WORD wResId , LPSTR lpszOutputPath)
{ //example: Extract(IDB_BITMAP1, "Redrose.bmp");
HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , RT_BITMAP);
HGLOBAL hLoaded = LoadResource( NULL,hrsrc);
LPVOID lpLock = LockResource( hLoaded);
DWORD dwSize = SizeofResource(NULL, hrsrc);
HANDLE hFile = CreateFile (lpszOutputPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD dwByteWritten;
WriteFile(hFile, lpLock , dwSize , &dwByteWritten , NULL);
CloseHandle(hFile);
FreeResource(hLoaded);
}
答案 0 :(得分:4)
您要求RT_RCDATA
,但我打赌您没有通过RCDATA
语句添加位图。您可能通过BITMAP
语句添加了它,使其成为RT_BITMAP
。
将来,请说明哪一步失败而不是让人猜测。
答案 1 :(得分:0)
问题在于将NULL作为HINSTANCE参数传递给FindResource
,LoadResource
和SizeOfResource
。
如果你在启动期间(从WinMain或DllMain)尚未保存你的HINSTANCE,你可以使用它来获取它:
MFC:
HINSTANCE hInstance = AfxGetInstanceHandle();
否则:
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
答案 2 :(得分:0)
将原始文件作为自定义数据插入。 为此自定义数据提供文本名称,例如“MyType”,然后:
HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , _T("MyType"));