在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就不出错
...全文
215 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
  • 打赏
  • 举报
回复
单步调试下来,看看哪里出问题了.
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

65,210

社区成员

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

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