递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 3047|回复: 2
打印 上一主题 下一主题

[视窗] 内存模块的问题

[复制链接]

40

主题

152

帖子

2404

积分

金牌会员

Rank: 6Rank: 6

积分
2404
QQ
跳转到指定楼层
楼主
发表于 2023-12-2 17:11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
JU文件 = 取特定目录 (特定目录类型.系统桌面) + "124.dll"
JU模块句柄 = 内存模块.从文件加载 (JU文件)

请问下,内存模块 加载的DLL文件,是不是里面不能带窗口的?我试了两个DLL文件,不带窗口的DLL可以加载,带窗口的DLL它报错了。

错误: 接收到未经处理的严重异常,代码为: 0xE06D7363
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
沙发
发表于 2023-12-2 19:19:58 | 只看该作者
内存模块不是通过系统 API 正常加载 DLL,而是模拟了系统加载 DLL 的流程,但有些系统内部的操作是无法还原的。
比如内存加载的 DLL 对系统而言是不可见的,这带来的优点是隐蔽性,但同样也导致了内存 DLL 调用一些 API 无法得到正常的结果。

加载带窗口 DLL 出错的原因也是如此,MFC 内部会调用 GetModuleFileName,内存加载后,这个 API 只能返回 NULL。
而正常情况下会返回非空的文本指针,所以 MFC 内部没有对此做判断,接着 MFC 继续调用了这个空指针,自然就出错了。

评分

参与人数 1金钱 +1 收起 理由
350246356 + 1 赞一个!

查看全部评分

回复

使用道具 举报

12

主题

301

帖子

2704

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2704
板凳
发表于 2023-12-2 22:03:18 | 只看该作者
Xelloss0618 发表于 2023-12-2 19:19
内存模块不是通过系统 API 正常加载 DLL,而是模拟了系统加载 DLL 的流程,但有些系统内部的操作是无法还原 ...

擦,太生猛了。。之前加载大漠免注册DLL也是闪退
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 10:01 , Processed in 0.089289 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表