首页
社区
课程
招聘
[旧帖] c++ dll, 动态加载, 没有头文件和引入lib, 如何使用其中的类 0.00雪花
发表于: 2016-6-2 12:19 15613

[旧帖] c++ dll, 动态加载, 没有头文件和引入lib, 如何使用其中的类 0.00雪花

2016-6-2 12:19
15613
RT, 如何动态的加载c++动态库并使用其中的类生成对象, 还有继承其中的类, 所有的操作都是在没有头文件和引入lib的情况下, 只用动态加载, loadlibrary这种

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 68
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
类到了内存里 应该 就是
若干函数 操作若干内存
你把类对象看作申请的若干内存 类成员函数看作若干函数
不知道这样说的对不对
2016-6-2 16:38
0
雪    币: 68
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
参考  C++反汇编与逆向分析技术揭秘
2016-6-2 16:41
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你确定是C++的类导出?如果是的话可以用工具得到类成员函数声明, 如CppDLL v1.1
2016-6-2 20:07
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我有头文件和导入lib 但是在我的实际需求中需要在一个进程中加载多次dll, 如果用头文件和导入lib的话一个进程只能加载一次dll吧, 所以我想把dll文件名改一下然后用动态加载的方式, 多次加载, 我还要继承dll里的类
2016-6-3 09:03
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
没用, 光有头文件和lib你还不能取得函数地址.函数不多的话直接做映射
就算是LoadLibrary也只会加载一次, 除非每次文件不同, 用https://github.com/fancycode/MemoryModule吧
2016-6-3 12:49
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个貌似跟 loadlibrary差不多吧, 解决不了我的问题, 我的意思是我现在有dll, 头文件, 导入lib都有, 但是想加载多次, 所以就不能用导入lib和头文件这些了, 只能动太加载, 但是这是个c++的库, 我的程序里有个类要从这个库里的类继承, 有头文件的话我直接继承了, 但是现在不能用头文件, 因为想加载多次, 我怎么才能找到这个类, 我的代码要怎么写才能继承到这个类

库里面还有个类, 这个类可能通过一个类静态函数创建类对象, 那么这个静态函数我可以用 loadlibrary和GetProcAddress得到, 然后调用这个类的某个函数, 需要上面我继承的类的对象, 这样程序的信息就可能通过虚函数调用到我的类里了.  不知道我说的清不清楚, , 576013002这是我的QQ, 方便的话加QQ聊
2016-6-3 13:51
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
loadlibrary也是只能加载一次
2016-6-3 13:57
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
把dll文件名改了就可以加载多次了
2016-6-3 13:59
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
不好意思, 没看见你说的有虚函数
2016-6-3 14:02
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我是说普通的dll函数(c函数), 不是我本帖这个问题
难道把dll复制一下改下名称不可以多次加载吗? 记得以前试过是可以的
2016-6-3 14:07
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
呵呵, 我也头一次遇到这种问题, 以前都没有想过, 有没有什么好的解决办法
2016-6-3 14:09
0
雪    币: 1114
活跃值: (2094)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
你必须知道函数的名字还有参数
2016-6-5 19:44
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这些都知道, 因为我现在就有头文件
2016-6-6 09:07
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
如果你还要继承DLL中的类,那会非常麻烦,你需要自己处理虚函数,等等,写起来也很别扭。不建议走这条路。

我给的建议是,你写一个dll,使用头文件和dll调用其中的类,把功能使用C方式导出。只要把stub dll 和你原始的dll放在不同目录加载,就能加载很多份到一个进程中。
2016-6-6 09:35
0
雪    币: 9
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这样是不是自己封装的dll加载了很多次, 但是上述第三方dll只加载一次呢? 求详细方法, 或者加下QQ:576013002
2016-6-6 12:37
0
游客
登录 | 注册 方可回帖
返回
//