GetProcAddress动态加载某个DLL里的导出函数时,DllMain和导出函数的加载顺序.
搞得头晕了.特来请教.
GetProcAddress动态加载某个DLL里的导出函数时,
如果这个DLL没有DllMain,或则DLL_PROCESS_ATTACH下没有要执行代码.
则当然不存在上面这样的问题.DLL就像一个可随时调用的功能LIB库。
很不幸, 我的DLL不仅有DllMain, 而且DLL_PROCESS_ATTACH下还有要执行的代码.
更要命的是,这里的代码和导出函数里的代码访问的是同一个由"#pragma data_seg"
共享的某个变量.并对这个变量进行修改。
所以这里就产生了这个简直是地狱般的先后问题:
到底加载导出函数的时候,
1是先执行导出函数里的代码,在执行DllMain下L_PROCESS_ATTACH的代码?
2.反之.
增加了些测试代码, 好像是1的情况,特来求证!
[解决办法]
先执行PROCESS_ATTACH的代码,因为LoadLibrary的时候会执行DLLMain。
[解决办法]
[解决办法]
总而言之, 先执行DLLMain()
[解决办法]
第一:任何DLL都会有DllMain的。
第二:DllMain是在调用LoadLibrary时调用的,并不是在GetProcAddress时调用的,换句话说,当你调用DLL中的导出函数时,DllMain早已经调用过了。