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

freeman_feng 2008-11-06 02:26:38
我做了一个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),"XML");


// 获得资源数据的句柄
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!!!!!!");
return -1;
};
OutputDebugString("\n -------------LoadResource Success!!!!!!");
// 资源数据的大小
INT dwSize = SizeofResource(hInstance1,hRes);
if(pData == NULL)
{
return dwSize;
}
// 资源加锁
PBYTE pSrc = (PBYTE)LockResource(hResData);
if (!pSrc)
{
FreeResource(hResData);
return -1;
};
// 复制数据
CopyMemory(pData,pSrc,dwSize);
// 释放资源
FreeResource(hResData);
return dwSize;

}
上面是读取这个资源文件的函数代码,其间,我也怀疑了HINSTANCE没有获取,后来我也获取了HINSTANCE,但还是错误。
第一个出现错误的地方就在hRes = FindResource(NULL, MAKEINTRESOURCE(nIDResource),"FPGA");这里就已经获取失败了。

请各位高手帮忙解决一下这个问题。
...全文
262 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SAM2002 2009-05-27
  • 打赏
  • 举报
回复
你是MDZ
freeman_feng 2008-11-17
  • 打赏
  • 举报
回复
补充一下,用GetLastError()取得的错误号是1814
freeman_feng 2008-11-17
  • 打赏
  • 举报
回复
感谢楼上的朋友提供的方案,不过按照你提供的两个方案的话,还是找不到资源,hRes还是等于NULL,我为了验证我的handle获得的是否正确,你上面提供的两种方案我都采用了,并且两个handle是相同的。然后使用方法hRes = FindResource(ghInstance, MAKEINTRESOURCE(nIDResource),"XML"); 但得到的结果:hRes = NULL;

请继续指教啊!谢谢~
兀石 2008-11-10
  • 打赏
  • 举报
回复
问题出在这:
hRes = FindResource(NULL, MAKEINTRESOURCE(nIDResource),"XML");
第一个参数你使用了NULL,只会在主程序的资源链中查找资源,而不是你的DLL中的资源。
建议将NULL改成你的DLL句柄。
方法一:可以使用GetModuleHandle()
方法二:在DLLMain()函数中,会保存当前DLL的实例句柄,你只要把这个实例句柄做成全局变量,在别的CPP中用extern引用,就可以了。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧