0

下面的代码执行,但它只提取一个空的位图文件。关于它有什么问题的任何想法?

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

3 回答 3

4

您要求,RT_RCDATA但我敢打赌您没有通过RCDATA声明添加位图。您可能通过BITMAP声明添加了它,这使它成为RT_BITMAP.

以后请说明是哪一步失败了,而不是让人猜测。

于 2012-07-09T16:17:53.007 回答
0

问题在于将 NULL 作为 HINSTANCE 参数传递给FindResourceLoadResourceSizeOfResource

如果您在启动期间尚未保存 HINSTANCE(来自 WinMain 或 DllMain),您可以使用以下方法获取它:

MFC:

HINSTANCE hInstance = AfxGetInstanceHandle();

别的:

HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
于 2012-07-09T02:35:04.987 回答
0

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

HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(wResId) , _T("MyType"));
于 2012-07-09T11:17:45.727 回答