要用到VC添加资源,可是不知道为什么在 FindResource处出错,GetLastError说是1812号错误代码如下:
#include"resource.h"
#include<windows.h>
int APIENTRY WinMain(HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR    lpCmdLine, 
                    int      nCmdShow) 
{ // 资源大小 
DWORD dwWrite=0; // 创建文件 
HANDLE hFile = CreateFile("Test.exe", GENERIC_WRITE,FILE_SHARE_WRITE,NULL, 
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
if ( hFile == INVALID_HANDLE_VALUE ) 

return FALSE; 
} // 查找资源文件中、加载资源到内存、得到资源大小 
HRSRC hrsc =  FindResource(NULL, MAKEINTRESOURCE(103), "exe"); 
HGLOBAL hG = LoadResource(NULL, hrsc); 
DWORD dwSize = SizeofResource( NULL,  hrsc); // 写入文件 
WriteFile(hFile,hG,dwSize,&dwWrite,NULL);  
CloseHandle( hFile ); 
return TRUE; 
}
不知道这是为什么?

解决方案 »

  1.   

    没有啊,就IMPORT进去后,链接运行就这样了,还没有一次成功过呢。
      

  2.   

    FindResource第三个参数传错了吧
      

  3.   

    HRSRC hrsc =  FindResource(NULL, MAKEINTRESOURCE(103), RT_RCDATA);
    自定义资源,用RT_RCDATA!
      

  4.   

    也用过IDR_XXX的方式,同样问题
      

  5.   

    我猜你是将一个exe添加到资源里了。
    添加时,选择类型时,你选择的是啥?自定义资源,应当选择RT_RCDATA类型!
      

  6.   

    1.你的资源是在exe中还是在其他的模块中(比如dll文件)
    2.如果是在exe中就可以用NULL,如果是在其他模块中的话就需要先打开模块用LoadLibrary()来获取模块句柄,然后将获取的句柄作为FindResource的第一个参数,FindResource的第二个参数用MAKEINTRESOURCE(资源ID),第三个参数就是资源的类型了,你看下资源管理器内,你要加入的资源是属于哪个类型的,是“String table”,还是"Dialog",还是你自定义的类型。
    3.FindResource会返回一个句柄,然后用LoadResource()来载入这个句柄,第一个参数同FindResource的第一个参数,第二个参数就是FindResource返回的句柄。
    4.如果你要获取资源的实体数据,那你还得用LockResource来获取资源在内存中的地址,它的参数就是LoadResource返回的句柄,LockResource会返回一个指针,用那个指针就可以读取相应的资源的实体数据了。