进程加载动态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的资源(可以用互斥)。
以上个人观点,如有错误,欢迎指正!