社区
进程/线程/DLL
帖子详情
DLL多次动态加载的问题。做过的进来看~!
wind_xu
2007-02-08 04:57:08
一个动态链接库,再程序中需要多次加载。但是每次加载的时候我需要通过导出函数Init, new 一个Object.
g_pObject = new Object();
g_pObject是全局变量,而由于DLL的特性,使得第二次调用Init的时候g_pObject已经被第一次的Init调用付了值。也就是说每次DLL被动态加载的时候g_pObject是同一个地址。
有什么办法可以让g_pObject在每次加载的时候都有不同的地址呢?
...全文
982
18
打赏
收藏
DLL多次动态加载的问题。做过的进来看~!
一个动态链接库,再程序中需要多次加载。但是每次加载的时候我需要通过导出函数Init, new 一个Object. g_pObject = new Object(); g_pObject是全局变量,而由于DLL的特性,使得第二次调用Init的时候g_pObject已经被第一次的Init调用付了值。也就是说每次DLL被动态加载的时候g_pObject是同一个地址。 有什么办法可以让g_pObject在每次加载的时候都有不同的地址呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
grefen
2011-08-21
打赏
举报
回复
把这个g_pObject = new Object(); 放到dll外面就可以了,如果dll里面用,通过参数传进来就可以了
xxq123321
2011-08-01
打赏
举报
回复
每次要不同的地址除了new还有什么办法?
如果这是考虑g_object已经被赋值,那增加一个类似reset的方法就行了
funny_li
2011-07-27
打赏
举报
回复
最简单的办法就是:把你要加载的dll,先改名复制,再加载。即:把他看成不同的dll。
luhifeng
2011-07-22
打赏
举报
回复
解决了么,这个问题
littlegang
2007-03-21
打赏
举报
回复
简单啊
有个函数可能大家不大用,所以不熟悉
TlsAlloc,可用于在dll中为每个Thread分配不同的存储区
也就是说,TlsAlloc一个相同的编号,对于不同Thread来说,其内容是不一样的
lz可以把g_pObject要保存的对象比如编为常量 #define GLOBALOBJECT 1
每个Thread用TlsGetValue(GLOBALOBJECT)就可以得到不同的object啦
具体MSDN
Using Thread Local Storage in a Dynamic-Link Library
WingForce
2007-02-27
打赏
举报
回复
感觉lz这个问题可以考虑线程本地存储
双杯献酒
2007-02-27
打赏
举报
回复
你可以在DLL中做一个 NewObj 函数,
只Load一次, 多次 NewObj
Jarrylogin
2007-02-26
打赏
举报
回复
看看COM组件中的引用计数,比较好的方法
luoxiangdong
2007-02-26
打赏
举报
回复
我遇到过同样的问题,同一个dll不需要加载多次,加载多次也没意义,因为系统只有第一次会真正加载,dll 中的全局数据数据无法正常使用.
long CreateInterface()
{
Obj* m_s=new Obj();
return (long)m_s;
}
long TerminateInterface(long handle)
{
Obj* m_s=((Obj*)handle);
delete m_s;
return 0;
}
long Dosomething(long handle)
{
return ((Obj*)handle)->dosomething();
}
这样的方式使用即可避免全局量的冲突
UDX协议
2007-02-14
打赏
举报
回复
在同一进程中是同一地址,不同进程中,是不同的地址。
linuxpgy
2007-02-12
打赏
举报
回复
Init 改名叫CreateNewObject() ,嘿嘿~~~~
sevencat
2007-02-09
打赏
举报
回复
每次加载的时候把老的删掉,再创 个。
wind_xu
2007-02-09
打赏
举报
回复
没人有办法吗?
wind_xu
2007-02-08
打赏
举报
回复
我只是在找一种方法,使得每次动态加载DLL就像通过new产生一个实例一样。
peterxuxu
2007-02-08
打赏
举报
回复
DLL一般都不会有问题如果你是纯的DLL那么用LoadLibaray,应该就不存在冲突问题了
crumpy
2007-02-08
打赏
举报
回复
那维护一个g_pObjList的列表呢?
wind_xu
2007-02-08
打赏
举报
回复
这样确实没有问题。但是无法满足我的要求啊!
crumpy
2007-02-08
打赏
举报
回复
要是不用全局变量呢, 直接:
Object* Init(){ return new Object; }
最好还提供一个释放的函数: void Free(Object* pObj){ delete pObj; }
游戏打不开?软件崩溃?3分钟搞定 DirectX
DLL
缺失
问题
!
本文介绍了小番茄
DLL
修复工具,可解决Windows系统中DirectX
DLL
缺失
问题
。先科普了
DLL
的作用、易出
问题
的原因及与DirectX的关系,接着阐述工具功能、安装和使用方法,还给出游戏闪退和设计软件崩溃的修复案例,最后说明其技术原理和适用人群。
QLibrary
动态
加载
dll
本文介绍如何在Qt中使用QLibrary
动态
加载
DLL
,并演示了一个具体的示例,包括代码实现及运行结果。
【Qt】
动态
加载
DLL
之QLibrary类学习(内含完整Demo源码)
本文介绍Qt中QLibrary类的使用方法,包括构造函数、设置
动态
库、
加载
动态
库等关键API,并提供了一个完整的
动态
加载
示例,演示了如何创建和
加载
一个执行加法运算的
动态
链接库。
还用VS2019制作
动态
加载
DLL
本文介绍了如何使用Visual Studio创建并
动态
加载
DLL
,详细说明了
DLL
的创建步骤及调用方式。通过实际测试演示了
动态
调用的过程,并解决了常见的193错误
问题
。
UE4
加载
使用自定义
dll
动态
链接库
本文详细介绍了如何在UE4中创建、编译及
加载
自定义的C++
DLL
动态
链接库,包括定义导出函数、编译
DLL
文件以及在UE4项目中使用
DLL
计算圆的面积,帮助初学者理解这一过程。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章