能力值:
( LV12,RANK:1010 )
|
-
-
2 楼
在进程/线程退出了dll后但是其他进程/线程并没有释放dll导致了函数指针为空的访问违规
这句木有看明白捏.
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
例如:
线程A链入了该A.DLL----进行了一些猥亵的操作后他释放了A.dll
进程B也链入了A.dll----但是在线程A释放了A.dll后B并没有释放A.dll导致A.dll中的全局变量释放当B调用A.dll的某个函数进行共享数据段操作的时候就产生了访问违规。
不知道我解释明白了没有
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
如果你是在一个Process中那应该有适当的同步机制保证B自己访问的数据应该是有效的
如果不是在一个Process中那就更不用担心了,这不是一个资源的
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
请问这个同步机制该如何保持?
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
这同步HANDLE我该何时创建?
DllMain线程每次加载时候都会路过这里如果在这个地方CreateHandle势必将造成CreateHande*N而卸载时CloseHandle*1
|
能力值:
(RANK:10 )
|
-
-
7 楼
为什么要放到全局共享段里呢?
每次dll 被load 的时候获取一次就可以了啊。
|
能力值:
(RANK:10 )
|
-
-
8 楼
进程之间共享数据让人是非常猥琐的做法
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
第一我不想让DLL客户端知道我是用了哪些API得到这些信息
第二每个进程可能多次加载我DLL里的这个类所以就造成了这种现象。
|
能力值:
(RANK:1010 )
|
-
-
10 楼
“A.dll中的全局变量释放”???
既然这个变量在共享段又怎么会有释放这一说,你又没有动态开辟空间
就算这些变量是函数指针,对于ntdll.dll来说,同一系统的所有进程中所有的ntdll.dll模块地址都是相同的,也应该不会出现你说的情况
应该是你自己代码的问题
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
就是因为是共享的所以在某个进程或线程释放了这个内存就为空了,当其他进程/线程在访问的时候就违规了。
|
能力值:
(RANK:1010 )
|
-
-
12 楼
共享段和共享内存是两个东西,不要混了。
如过是共享段就不会出现你说的问题。
如果是共享内存,需要记录引用记数,引用数为0时才释放
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
谢谢老大阿!又明白了一样
在问个问题:怎么才能动态导出C++类?
|
能力值:
( LV13,RANK:530 )
|
-
-
14 楼
还是托管好。
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
C/C++
托管?什么概念?
怎么处理?
|
|
|