要用到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;
}
不知道这是为什么?
#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;
}
不知道这是为什么?
自定义资源,用RT_RCDATA!
添加时,选择类型时,你选择的是啥?自定义资源,应当选择RT_RCDATA类型!
2.如果是在exe中就可以用NULL,如果是在其他模块中的话就需要先打开模块用LoadLibrary()来获取模块句柄,然后将获取的句柄作为FindResource的第一个参数,FindResource的第二个参数用MAKEINTRESOURCE(资源ID),第三个参数就是资源的类型了,你看下资源管理器内,你要加入的资源是属于哪个类型的,是“String table”,还是"Dialog",还是你自定义的类型。
3.FindResource会返回一个句柄,然后用LoadResource()来载入这个句柄,第一个参数同FindResource的第一个参数,第二个参数就是FindResource返回的句柄。
4.如果你要获取资源的实体数据,那你还得用LockResource来获取资源在内存中的地址,它的参数就是LoadResource返回的句柄,LockResource会返回一个指针,用那个指针就可以读取相应的资源的实体数据了。