从Windows模块中的资源中提取文件

下面的代码执行,但它只提取一个空的位图文件。 任何想法,以什么是错的呢?

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); } 

Solutions Collecting From Web of "从Windows模块中的资源中提取文件"

您正在询问RT_RCDATA但我敢打赌,您没有通过RCDATA语句添加您的位图。 你可能通过一个BITMAP语句来添加它,这使得它成为RT_BITMAP

未来,请说明哪一步失败,而不是让人猜测。

将您的原始文件作为自定义数据插入。 给这个自定义数据一个文本名称,例如“MyType”,然后:

 HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , _T("MyType")); 

问题是将NULL作为您的HINSTANCE参数传递给FindResourceLoadResourceSizeOfResource

如果您尚未在启动过程中保存HINSTANCE(从WinMain或DllMain),您可以使用:

MFC:

 HINSTANCE hInstance = AfxGetInstanceHandle(); 

其他:

 HINSTANCE hInstance = (HINSTANCE)GetmoduleeHandle(NULL);