动态Dll加载若干问题

进程加载动态Dll步骤:

1. 当进程加载动态Dll时,进程给动态Dll分配了虚拟内存空间。

2.进程开始初始化Dll的全部变量和静态变量。初始化的顺序不定(太多因素影响了。。。)。

3.进程开始调用DllMain函数。函数其中一个变量ul_reason_for_call值为DLL_PROCESS_ATTACH。

 

Dll被同一个进程多次调用产生的问题

例如:

当A进程需要B和C两个模块。但A进程不知道B和C同时调用了一个Dll模块X。B和C都调用模块X的初始化资源函数。

这时突然间发现模块X的资源被初始化了两次,怎么办。

 

发生以上问题,主要在于没有考虑到模块被同一进程多次调用的情况,因此在写模块X的时候,需要有一个机制保证只初始化一次Dll的资源(可以用互斥)。

 

以上个人观点,如有错误,欢迎指正!

 

 

你可能感兴趣的:(c,dll)