社区
进程/线程/DLL
帖子详情
DLL的包含问题,能否在A.DLL中包含B.DLL,使之最终能够具备B.DLL中的全部功能?
mechiland
2003-10-18 08:49:14
请教高手一个问题:原来写有一个B.DLL,后来我发现这个B.DLL功能不足,但是源代码也不见了,现在我想写一个A.DLL来封装他,并且提供更多的函数。外界表现仅为一个A.DLL,那个B.DLL已经不需要了。能实现吗?
...全文
96
8
打赏
收藏
DLL的包含问题,能否在A.DLL中包含B.DLL,使之最终能够具备B.DLL中的全部功能?
请教高手一个问题:原来写有一个B.DLL,后来我发现这个B.DLL功能不足,但是源代码也不见了,现在我想写一个A.DLL来封装他,并且提供更多的函数。外界表现仅为一个A.DLL,那个B.DLL已经不需要了。能实现吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mechiland
2003-10-20
打赏
举报
回复
我试着用了一下DLL2LIB工具,发现他导出的LIB并不是很尽人意啊
microran2000
2003-10-19
打赏
举报
回复
如果你知道函数名称,而不知道参数类型和返回值类型,(参数名称没有用),我想这个DLL肯定不是你编写的.我不知道,你既然不知道函数有几个参数,各个参数对应什么类型,返回值是怎么定义的.那么你怎么调用呢?
函数转发器是通过编译器来实现的,当然你可以手工来转发,自己编写一个代理函数.但是无论是手工还是自动转发都需要你知道函数的定义规范,否则这个DLL无法使用.比如你想拦截这个DLL中的某个函数,让它调用前先执行你的代码,然后在调用自身.如果你不知道函数有几个参数.怎么实现.
尽管对代码反汇编可以知道每个函数究竟有几个参数.(通过堆栈指针来察看),也可以跟踪加载程序,来发现入栈参数的个数来确定参数的个数.一般地,DLL输出函数都是通过EAX寄存器来返回结果的,但是这个寄存器究竟存放的是数值还是指针,你只有跟踪代码才能得到.
所以你在使用这个DLL之前首先需要得到或者整理一个文档说明,才能实现A.DLL.
poweruser
2003-10-19
打赏
举报
回复
关注ing^^^^^
mechiland
2003-10-19
打赏
举报
回复
虽然比较晕,但是大概能够明白意思。
“比如你想拦截这个DLL中的某个函数,让它调用前先执行你的代码,然后在调用自身”,我不明白,我只想将B.DLL中的方法原封不动的迁移到A.DLL中而已,从而使A.DLL更加强大并且不依赖B.DLL,也不需要调用前执行我的代码啊?
microran2000
2003-10-19
打赏
举报
回复
可以试一下Dll2LIB工具,以链接静态库方式代替动态链接库:
http://www.winportal.com/file.asp?ObjectID=6333
MilitaryMiniatures
2003-10-19
打赏
举报
回复
Windows核心编程这本书上,关于Dll的部分,有很好的解释!
mechiland
2003-10-18
打赏
举报
回复
高手啊高手!!
这个问题困扰我很久……感动
1 我现在知道输出函数的名称,但是不知道具体的参数名称,影响使用吗?如果照那种“函数转发器”的思路,应该是能够用的吧?
2 嵌入到A.DLL中的B.DLL如何解压?如果采用届压的办法,那么在写“函数转发器”时路径岂不是不能确定?
microran2000
2003-10-18
打赏
举报
回复
这个问题相对比较复杂,首先尽管B的代码不见了,但是你必须知道B的输出函数的声明,否则在A中也是没有办法用的.
如果你知道函数的所有声明,这个问题应该是很容易解决的.你可以在A中编写与B声明一样的函数,在这些函数中调用B的函数.也可以在A中直接作为函数转发器,当应用程序调用A的输出函数时,会自动调用B的函数.就像Windows 2000的Kernel32.dll一样,尽管这个函数输出了许多API函数,但是实际上它采用函数转发器,真正的函数实现在NTDLL.DLL中.比如HeapAlloc HeapFree等函数
如果你想制作自己的函数转发器可以采用
#pragma comment (linker,"/export:FuncName=B_DLL.FuncName")
其中FuncName是函数名称
B_DLL是B动态链接库的名字.
当然如果你想完全隐藏B,你可以把B.DLL作为一个资源嵌入到A.dll中.在运行是动态把它解压到一个临时目录.调用结束后在把它删掉.
当然你还可以实现动态延迟加载
Newtonsoft.Json.
dll
程序文件
json对象格式转化,最新版本 Newtonsoft.Json.
dll
欢迎大家使用。不需要任何分
Fp4autl.
dll
,Fpencode.
dll
,Fp4awel.
dll
安装office2007提示: windows installer 服务不能更新一个或多个受保护的windows文件
问题
解决. 下载这三个文件保存到对应的路径,即可正常安装.
vcruntime140.
dll
问题
的解决方法
安装apache时提示“vcruntime140.
dll
”。只不过是因为vc++的运行库的
问题
。本软件
中
包括了64位系统的各种版本的vc++运行库,主要全部安装,
问题
就能得到解决
c#sqlite的
dll
文件:System.Data.SQLite.
DLL
包含
各个环境的
dll
,64位,32位,CompactFramework等多种;好不容易才找到的,转载下,希望要用的朋友们能快速找到。免费提供,呵呵
CrystalDecisions组件下载(最全最新)
DLL
水晶报表的相关组件,
包含
: (1)CrystalDecisions.Crystalreports.Engine.
dll
(2)CrystalDecisions.Enterprise.Framework.
dll
(3)CrystalDecisions.ReportSource.
dll
(4)CrystalDecisions.Windows.Forms.
dll
(5)CrystalDecisions.Shared.
dll
(6)CrystalDecisions.Enterprise.InfoStore.
dll
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章