在DLL中加载资源的问题

晓峰-Bitcoin 2008-10-22 10:09:08
我写了一个COM (DLL1),在这个COM中调用了另外一个DLL2,DLL2中会加载自己的资源,比如XML类型的文本。

最终这个COM是有Explorer来调用的,但是Exploere调用我COM的时候,DLL2可以正确读取自己的资源,但是下面这一句就会出错,

//省略了之前加载资源的部分代码
DWORD size;

size = SizeofResource (hMyInst, hMyRes);
MyResource = LockResource (hMyRes);
MyResource [size - 1] = 0; //这一行会出现内存写错误

但是令人诧异的事情是,Explorer插这个COM的时候这里会出错,但是如果我自己写一个EXE直接调用DLL2就不出错
...全文
216 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
晓峰-Bitcoin 2008-10-24
  • 打赏
  • 举报
回复
////LockResource 返回的 MyResource 是不是空指针?
////如果不是空指针,可以记录一下日志看看里面的内容是什么?
不是空指针 我看了指针的内容是正确的,和我的资源的内容是一样的

////或者测试一下
////MyResource [size - 2] = 0
////MyResource [0] = 0

////看看等这样的代码会否出问题
这样的代码也会出问题 内存访问错误

[/Quote]
星羽 2008-10-22
  • 打赏
  • 举报
回复
LoadResource 成功了吗?
晓峰-Bitcoin 2008-10-22
  • 打赏
  • 举报
回复
完整代码如下: 已经加了错误检查了

static char LoadMyLanguageResource ()
{
if (MyLanguageResource == NULL)
{
DWORD size;
MyLanguageResource = LoadXMLResource ("Xml", IDR_LANGUAGE, &size);
MyLanguageResource[size - 1] = 0;
}

return MyLanguageResource;
}

BYTE *LoadXMLResource (char *resourceType, int resourceId, PDWORD size)
{
HGLOBAL hResL;
HRSRC hRes;

hRes = FindResource (hInst, MAKEINTRESOURCE(resourceId), resourceType);
hResL = LoadResource (hInst, hRes);

if (size != NULL)
*size = SizeofResource (hInst, hRes);

return (BYTE *) LockResource (hResL);
}
hhyttppd 2008-10-22
  • 打赏
  • 举报
回复
加些错误检查吧,估计是资源定位的问题。
scklotz 2008-10-22
  • 打赏
  • 举报
回复
看起来比较奇怪的

LockResource 返回的 MyResource 是不是空指针?
如果不是空指针,可以记录一下日志看看里面的内容是什么?

或者测试一下
MyResource [size - 2] = 0
MyResource [0] = 0

看看等这样的代码会否出问题
晓峰-Bitcoin 2008-10-22
  • 打赏
  • 举报
回复
前面各位说的问题都没有出错 资源已经加载了,size也是正确的,和我资源文件的大小是一样的。也没有加载别的DLL里的资源,是自己的。

还有一个我搞不明白的问题就是,为什么我自己的EXE调用就不会出现问题,但是Explorer->我的COM->DLL的时候为什么就会出错呢?


scklotz 2008-10-22
  • 打赏
  • 举报
回复
dll在system32中吗?
你的代码都不做错误处理。
scklotz 2008-10-22
  • 打赏
  • 举报
回复
1 确保dll是否能被com加载 即hMyInst是ok的 而且是正确的dll,不要加载到别的dll去了
2 确保资源被正确加载 即hMyRes是ok的 size是有效的(>0)
3 确保资源指针是有效的 即MyResource是非空
帅得不敢出门 2008-10-22
  • 打赏
  • 举报
回复
单步调试下来,看看哪里出问题了.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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