社区
进程/线程/DLL
帖子详情
一个进程内加载相同的多份DLL的问题
ldsjlzy
2008-07-30 03:30:54
有一样一个需求,一个进程内需要load一个dll的多个副本,即该进程需要加载多个相同的dll,该dll是第三方提供的不能修改,里面有一个init()初始化的函数,但load第二份dll时第二次调init()时会出错,因为init()内部有静态变量,与第一份dll内的冲突,有什么办法让不同dll副本不共享这些静态变量?
...全文
750
22
打赏
收藏
一个进程内加载相同的多份DLL的问题
有一样一个需求,一个进程内需要load一个dll的多个副本,即该进程需要加载多个相同的dll,该dll是第三方提供的不能修改,里面有一个init()初始化的函数,但load第二份dll时第二次调init()时会出错,因为init()内部有静态变量,与第一份dll内的冲突,有什么办法让不同dll副本不共享这些静态变量?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gjb711
2011-11-28
打赏
举报
回复
将DLL 复制一份 改名, 再加载就可以了
thenshesaid
2008-08-02
打赏
举报
回复
有这个需求,因为一个进程内测试这个动态库的多个实例运行起来后整个程序的性能
只能说诡异的TEST CASE
jyh_baoding
2008-08-01
打赏
举报
回复
动态库加载多份,就失去了他的意义啊,想点别的办法啊
cnzdgs
2008-07-30
打赏
举报
回复
既然是测试,那就按照软件实际运行的做法来测,如果软件实际运行就不存在这种情况,测试就没有意义了。
zgl7903
2008-07-30
打赏
举报
回复
在 CWinApp::InitInstance() 中加载
在 CWinApp::ExitInstance() 中释放
ldsjlzy
2008-07-30
打赏
举报
回复
有这个需求,因为一个进程内测试这个动态库的多个实例运行起来后整个程序的性能
vcPlayer
2008-07-30
打赏
举报
回复
[Quote=引用楼主 ldsjlzy 的帖子:]
有一样一个需求,一个进程内需要load一个dll的多个副本,即该进程需要加载多个相同的dll,该dll是第三方提供的不能修改,里面有一个init()初始化的函数,但load第二份dll时第二次调init()时会出错,因为init()内部有静态变量,与第一份dll内的冲突,有什么办法让不同dll副本不共享这些静态变量?
[/Quote]
为何要加载多个副本?
cnzdgs
2008-07-30
打赏
举报
回复
看来不是全局变量的问题,应该是有其它特殊操作,例如使用全局对象等,你先试试多进程吧,如果多进程也不行就只能改程序了。
Yofoo
2008-07-30
打赏
举报
回复
使用多个Dll时 不能用 lib来确定导出函数了
需要自己 GetProcAddress 来取得函数地址,
用lib会导致所有函数全部定位到同一个Dll, 所以会冲突
ldsjlzy
2008-07-30
打赏
举报
回复
如何让加载的dll副本具有独立的内存空间。
hxfjb
2008-07-30
打赏
举报
回复
自己hook一下dll 的init函数,第二次调用这个函数的时候,仅仅返回true就可以了。
WispyDeng
2008-07-30
打赏
举报
回复
不执行 DllMain 都不行,那就不是 LoadLibrary 是的 Init 问题吧
ldsjlzy
2008-07-30
打赏
举报
回复
每个dll内部在init的时候有一个防止多实例的实现,无非就是用一个全局变量作判断,因为是别人的dll,不能改。上面方法我都试过了不行
zhoujianhei
2008-07-30
打赏
举报
回复
感觉不是
静态变量
的问题,因为每个
静态变量
都在自己的DLL空间中。
WispyDeng
2008-07-30
打赏
举报
回复
第一次Load执行,第二次以上Load不执行不就得了?
stivenjia
2008-07-30
打赏
举报
回复
不执行dllmain不建议也许对方在dllmain内进行初始化呢?
你可以尝试将其手工映射到内存中
闪破风浪
2008-07-30
打赏
举报
回复
同步吗???
ldsjlzy
2008-07-30
打赏
举报
回复
即使改成其它名加载,但因为是同一进程内,所以每次调用每个dll的init()时静态变量就会冲突。
WispyDeng
2008-07-30
打赏
举报
回复
用 LoadLibraryEx ,第三个参数传 DONT_RESOLVE_DLL_REFERENCES,这样不执行 DllMain()
孤客天涯
2008-07-30
打赏
举报
回复
可以试试,前提dll为动态调用
class CIncDll //定义一个DLL的接口类
{
// 在该类中Load dll,获取dll函数地址相关操作。。。。
};
应用:
CIncDll *m_pDll = new CIncDll ;//用指针,申请空间
通过m_pDll访问DLL
加载更多回复(2)
动态
加载
dll
的
问题
(同
一个
进程
使用
dll
的解决办法)
今天项目需要进行同
一个
dll
的多线程同时操作。 解决办法 :通过动态
加载
的办法 将
dll
复制重命名 即 线程A-----复制test.
dll
并重命名为test_A.
dll
--动态
加载
test_A.
dll
线程B-----复制test.
dll
并重命名为test_B...
DLL
入门浅析 - 多
进程
加载
DLL
内存模型
在Win16环境中,
DLL
的全局数据对每个载入它的
进程
来说都是
相同
的,因为所有的
进程
用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个
进程
都有了它自己的地址空间,
DLL
函数中的代码所创建的任何对象...
同
一个
进程
加载
同
一个
动态库两次的现象
我猜,同
一个
进程
加载
同
一个
动态库两次,用的其实是同一份内存空间。下面直接根据代码看结果。 // 下面的测试动态库Test.
dll
的代码,就
一个
头文件
dll
_global.h和
一个
main.cpp. #ifndef
DLL
_GLOBAL_H #define
DLL
_...
有关
DLL
的几个
问题
一、
DLL
被多个
进程
调用
问题
Win32系统会确保内存中只有
一个
该
DLL
的拷贝,这是通过内存映射文件来实现的。不同的
进程
分别将这份
DLL
的代码段地址映射到自己的
进程
空间中,同时不同的
进程
在自己的
进程
空间分别有各自的...
进程
注入之
DLL
注入
DLL
注入是将代码注入到
一个
远程
进程
中,并让远程
进程
调用LoadLibrary()函数,从而强制远程
进程
加载
一个
DLL
程序到
进程
中。而当
DLL
被
加载
时就会运行
DLL
中的
Dll
Main()函数,所以就会为恶意代码的执行提供机会,而因为...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章