2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
请问,系统调用这两个DLL时,会冲突吗?
15 个解决方案
#1
两个dll其他部分不同
#2
我认为不会
#3
不会造成冲突,因为两个dll本身的内存空间就不一样。
#4
嘻
我有三个三角了
鼓励一下自己
:)
我有三个三角了
鼓励一下自己
:)
#5
应该不会。
#6
应该映射进不同的虚拟地址,不会冲突,(最好自己试验一下)
#7
嗯,等我实践了告诉大家:)
#8
只有一个副本,是存在冲突的危险。它经常被用来判断加载次数等.
#9
如果在DLL中使用一般的全局变量,则存在多个副本。
使用
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
的目的就是只维护一个副本.
使用
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
的目的就是只维护一个副本.
#10
当第二个dll载入内存时,不会和第一个dll同样的地址空间,即使名字相同!所以共享数据段的地址都不同,应该不会冲突
#11
GZ
#12
gz
#13
该变量的内存地址:
address = ::GetModuleHandle(szModuleName) + virtualAddress;
address = ::GetModuleHandle(szModuleName) + virtualAddress;
#14
to:nightsuns(nightsuns)
一个进程调用的2个DLL,szModuleName能相同吗?
你的意思是2个不同进程分别调用这2个DLL时,不会冲突,对吧
一个进程调用的2个DLL,szModuleName能相同吗?
你的意思是2个不同进程分别调用这2个DLL时,不会冲突,对吧
#15
不好意思,现在才说:
1。Q:假如甲写了个test.dll,乙也写了个test.dll.
2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
并且分别有函数changeData甲(),changeData乙(),来修改2个DLL中g_test的值.
两个进程分别调用这两个DLL时,g_test,get_g_test甲(),changeData乙()会不会冲突?
A:两个进程分别调用这两个DLL时,不会冲突
2。Q:当一个进程同时调用这两个DLL时(将2个DLL分别改名为testA.dll,testB.dll),会不会冲突?
A:changeData甲(),changeData乙()修改的是各自的g_test,不会冲突
总结:无论如何,进程调用的不同DLL(包括仅名字不同的DLL,或仅所在目录不同的DLL)中的数据、函数是不会冲突的。
欢迎指点!
1。Q:假如甲写了个test.dll,乙也写了个test.dll.
2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
并且分别有函数changeData甲(),changeData乙(),来修改2个DLL中g_test的值.
两个进程分别调用这两个DLL时,g_test,get_g_test甲(),changeData乙()会不会冲突?
A:两个进程分别调用这两个DLL时,不会冲突
2。Q:当一个进程同时调用这两个DLL时(将2个DLL分别改名为testA.dll,testB.dll),会不会冲突?
A:changeData甲(),changeData乙()修改的是各自的g_test,不会冲突
总结:无论如何,进程调用的不同DLL(包括仅名字不同的DLL,或仅所在目录不同的DLL)中的数据、函数是不会冲突的。
欢迎指点!
#1
两个dll其他部分不同
#2
我认为不会
#3
不会造成冲突,因为两个dll本身的内存空间就不一样。
#4
嘻
我有三个三角了
鼓励一下自己
:)
我有三个三角了
鼓励一下自己
:)
#5
应该不会。
#6
应该映射进不同的虚拟地址,不会冲突,(最好自己试验一下)
#7
嗯,等我实践了告诉大家:)
#8
只有一个副本,是存在冲突的危险。它经常被用来判断加载次数等.
#9
如果在DLL中使用一般的全局变量,则存在多个副本。
使用
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
的目的就是只维护一个副本.
使用
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
的目的就是只维护一个副本.
#10
当第二个dll载入内存时,不会和第一个dll同样的地址空间,即使名字相同!所以共享数据段的地址都不同,应该不会冲突
#11
GZ
#12
gz
#13
该变量的内存地址:
address = ::GetModuleHandle(szModuleName) + virtualAddress;
address = ::GetModuleHandle(szModuleName) + virtualAddress;
#14
to:nightsuns(nightsuns)
一个进程调用的2个DLL,szModuleName能相同吗?
你的意思是2个不同进程分别调用这2个DLL时,不会冲突,对吧
一个进程调用的2个DLL,szModuleName能相同吗?
你的意思是2个不同进程分别调用这2个DLL时,不会冲突,对吧
#15
不好意思,现在才说:
1。Q:假如甲写了个test.dll,乙也写了个test.dll.
2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
并且分别有函数changeData甲(),changeData乙(),来修改2个DLL中g_test的值.
两个进程分别调用这两个DLL时,g_test,get_g_test甲(),changeData乙()会不会冲突?
A:两个进程分别调用这两个DLL时,不会冲突
2。Q:当一个进程同时调用这两个DLL时(将2个DLL分别改名为testA.dll,testB.dll),会不会冲突?
A:changeData甲(),changeData乙()修改的是各自的g_test,不会冲突
总结:无论如何,进程调用的不同DLL(包括仅名字不同的DLL,或仅所在目录不同的DLL)中的数据、函数是不会冲突的。
欢迎指点!
1。Q:假如甲写了个test.dll,乙也写了个test.dll.
2个dll中都有一个同名共享数据,如下
#pragma data_seg("segtest")
int g_test = 0;
#pragma data_seg()
SETCTIONS
segtest READ WRITE SHARED
并且分别有函数changeData甲(),changeData乙(),来修改2个DLL中g_test的值.
两个进程分别调用这两个DLL时,g_test,get_g_test甲(),changeData乙()会不会冲突?
A:两个进程分别调用这两个DLL时,不会冲突
2。Q:当一个进程同时调用这两个DLL时(将2个DLL分别改名为testA.dll,testB.dll),会不会冲突?
A:changeData甲(),changeData乙()修改的是各自的g_test,不会冲突
总结:无论如何,进程调用的不同DLL(包括仅名字不同的DLL,或仅所在目录不同的DLL)中的数据、函数是不会冲突的。
欢迎指点!