我举一个问题的例子。
如果通过某些方式执行DLL文件(称为A),我假设'A'在系统根目录中加载了一些DLL文件。
其中一个DLL文件称为'B',其入口点类似于DllMain函数。
所以,如果我运行'A',那么也会调用'B'的入口点吗?
如果被调用,我可以控制DllMain的参数吗?
感谢您对此问题的关注。
祝你今天愉快 :)
我回答我自己的问题:)
例子
DllMain功能:
DllMain(...) {
MessageBoxA(NULL, "in DLL1 function DllMain()", "test", 0);
hello()
...
}
hello函数(不导出函数):
hello() {
MessageBoxA(NULL, "in DLL1 function hello()", "test", 0);
}
导出函数(导出函数):
exported() {
MessageBoxA(NULL, "in DLL1 function exported()", "test", 0);
}
和消息框按顺序填充:
DllMain() - > hello() - > exported() - > DllMain() - > hello()
但我不知道为什么最后调用DllMain函数。
这取决于你如何加载DLL。
DllMain
(在实际加载依赖项之前)。LoadLibrary
加载的,它的DllMain
将被执行。LoadLibraryEx
和任何LOAD_LIBRARY_AS_DATAFILE
加载,使用LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
或LOAD_LIBRARY_AS_IMAGE_RESOURCE
标志,将跳过DllMain
。更多细节可以在the LoadLibraryEx
documentation找到。