关于在VC中的动态库dll里的自定义资源的添加和读取

来源:百度知道 编辑:UC知道 时间:2024/06/02 16:56:54
我做了一个dll,同时在库中想把一些文件做为dll的资源编译到一起来使用,但现在的情况是找不到资源,会出错。
1、在建立时,工程的属性是使用标准 Windows 库,配置类型是(动态库(.dll));
2、我自定义了一个资源,资源类型我取名为XML,同时我导入了一个文件,文件的ID为:IDR_FPGA1
3、我在需要读取这个资源文件的地方的代码如下:
INT Card::LoadFPGAData( PBYTE pData,UINT FPGAFunc)
{
UINT nIDResource;
// 将资源ID转成资源名称
nIDResource = IDR_FPGA1;

LPCTSTR szResourceName = MAKEINTRESOURCE(nIDResource);

// 资源的类型
LPCTSTR szResourceType = "XML";

// 查找资源句柄
hRes = FindResource(NULL, MAKEINTRESOURCE(nIDResource),"FPGA");

// 获得资源数据的句柄
HGLOBAL hResData;
if (!hRes || !(hResData = LoadResource(hInstance1,hRes)))
{
DWORD ret;
ret = GetLastError();
char str[256];
sprintf(str,"ret = %d",ret);
OutputDebugString("\n -------------GetLastError:!!!!!!");
OutputDebugString( str);
OutputDebugString("\n -------------LoadResource Failed!!!!!!");

你需要增加一个GetModuleHandle函数:
HINSTANCE hDll = GetModuleHandle(L"abc.dll");

HRSRC hRsrc = FindResource(hDll, MAKEINTRESOURCE(IDR_RT_RCDATA1), L"RT_RCDATA");
if (NULL == hRsrc)
return FALSE;
DWORD dwSize = SizeofResource(hDll, hRsrc);
if (0 == dwSize)
return FALSE;
HGLOBAL gl = LoadResource(hDll, hRsrc);
if (NULL == gl)
return FALSE;
LPVOID lp = LockResource(gl);
if (NULL == lp)
return FALSE;