社区
进程/线程/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在每次加载的时候都有不同的地址呢?
...全文
941
18
打赏
收藏
DLL多次动态加载的问题。做过的进来看~!
一个动态链接库,再程序中需要多次加载。但是每次加载的时候我需要通过导出函数Init, new 一个Object. g_pObject = new Object(); g_pObject是全局变量,而由于DLL的特性,使得第二次调用Init的时候g_pObject已经被第一次的Init调用付了值。也就是说每次DLL被动态加载的时候g_pObject是同一个地址。 有什么办法可以让g_pObject在每次加载的时候都有不同的地址呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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; }
深入理解
动态
加载
技术:
DLL
与WebService
延迟
加载
(Lazy Loading)是一种设计模式,它将对象的
加载
推迟到实际需要时才进行。这种模式主要用于优化应用程序的性能和资源消耗,特别是在涉及大量数据处理的应用程序中显得尤为重要。延迟
加载
的核心思想是“按需
加载
”,这意味着只有在对象第一次被访问时才
加载
。这种方式有以下几个优点:降低初始
加载
时间:程序启动时不需要
加载
所有的内容,只
加载
最基础的部分。减少内存消耗:只
加载
当前需要的数据和功能,避免了不必要的内存占用。提高程序响应速度。
CAD二次开发关于只
加载
一个
dll
动态
库(没有包含CommandMethod)就能将其他被引用的
dll
CAD(CommandMethod)命令也是
加载
的解决方法
CAD二次开发关于只
加载
一个
dll
动态
库(没有包含CommandMethod)就能将其他被引用的
dll
CAD(CommandMethod)命令也是
加载
的解决方法
DLL
两种
加载
的详解
DLL
两种
加载
的详解 参照链接:http://www.cnblogs.com/tswcypy/p/4554041.html 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为
动态
连接库(
DLL
,以下简称“
动态
库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干
cad
加载
dll
_你的CAD为什么安装不上?
进来
看看你就知道了
▲点击“CAD教学”,获取海量学习资料和免费教程1.未安装NET组件经常遇到此
问题
。对于CAD 2004-2014,需要安装Microsoft .NET Framework 3.5,而2015年以上的版本则需要Mircosoft .NET Framework 4.7或更高版本。怎么解决?我们打开控制面板,单击“程序”,单击选项以打开或关闭Windows功能,然后找到所需的NET版本,将...
改变隐式
加载
dll
路径的方法(不修改环境变量)
问题
: 今天我遇到了这样一个需求:随着代码的累计,
dll
越来越多了,想将exe所有依赖的
dll
放到子目录中,保持软件顶级目录的整洁. 但有个一限制条件--不能修改环境变量PATH.对于使用LoadLibrary
加载
的
dll
还好办,只需要修改
dll
所在的路径即可.但对于那些隐式
加载
的
dll
却无法分离(有些
dll
要么导出了大量的函数,如果使用LoadLibrary+GetProcAddess的方式工...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章