反复调用dll库时,调用时库中所有的参数都要初始化吗
发布网友
发布时间:2022-05-18 00:22
我来回答
共1个回答
热心网友
时间:2023-11-18 07:12
1)对于静态链接的dll,它的全局变量和静态变量什么时候初始化,是在dllmain函数之前么,和exe的全局变量谁先初始化?如果是动态链接的话,又是什么顺序?
2)对于动态链接的dll,使用loadlibrary()函数,它会创建自己的堆么?freelibrary()函数的调用会引起vc进行内存泄露检查么,那它检测的是那部分的内存泄露,是这个dll函数中的么?
3)在windows核心编程里头有以下代码:
VOID EXEFunc()
{
PVOID pv = DLLFunc();
//Access the storage pointed to by pv...
//Assumes that pv is in EXE's C/C++ run-time heap
free(pv);
}
PVOID DLLFunc()
{
//Allocate block from DLL's C/C++ run-time heap
return(malloc(100));
}
解释是:那么你是怎么看待这个问题的呢?上面这个代码能够正确运行吗? D L L函数分配的内存块是由E X E的函数释放的吗?答案是可能的。上面显示的代码并没有为你提供足够的信息。如果E X E和D L L都链接到D L L的C / C + +运行期库,那么上面的代码将能够很好地运行。但是,如果两个模块中的一个或者两个都链接到静态C / C + +运行期库,那么对free函数的调用就会失败
我的疑问是不都是从进程的堆中分配么,静态的c/c++库只不过是指在dll和exe都有份代码,难道他们是从不同的堆中分配的?
先行谢过!!
pomelowu
12-31 09:37
等级
1楼
1 自己做做试验咯~ :P
2 动态链接应该不会创建自己的堆
3 这个问题讨论过了:
http://community.csdn.net/Expert/topic/4446/4446791.xml?temp=.6249201
0
waterblood
12-31 09:51
等级
2楼
Thanks
关于问题1,我已经明白了
过程是这样的