我举个例子。
如果通过某种方式执行了DLL文件(称为A),则我认为'A'会在系统根目录中加载某些DLL文件。
这些DLL文件之一称为“ B”,其入口点类似于DllMain函数。
所以如果我运行'A',也会调用'B'的入口点吗?
如果调用它,我可以控制DllMain的参数吗?
感谢您对此问题的关注。
祝你有美好的一天:)
答案 0 :(得分:0)
我回答了我自己的问题:)
示例
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函数最终被调用。
答案 1 :(得分:0)
这取决于您如何加载DLL。
如果它是通过导入表链接的,则将在需要依赖项时(实际上是在加载依赖项之前)对其进行加载并执行DllMain
。
如果通过LoadLibrary
加载,则将执行其DllMain
。
如果通过LoadLibraryEx
加载并且使用了LOAD_LIBRARY_AS_DATAFILE
,LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
或LOAD_LIBRARY_AS_IMAGE_RESOURCE
标志中的任何一个,则将DllMain
跳过。 / p>
更多详细信息可以在the LoadLibraryEx
documentation中找到。