加载DLL文件时,DLL文件的入口点是否也被调用?

问题描述 投票:-1回答:2

我举一个问题的例子。

如果通过某些方式执行DLL文件(称为A),我假设'A'在系统根目录中加载了一些DLL文件。

其中一个DLL文件称为'B',其入口点类似于DllMain函数。

所以,如果我运行'A',那么也会调用'B'的入口点吗?

如果被调用,我可以控制DllMain的参数吗?

感谢您对此问题的关注。

祝你今天愉快 :)

windows dll
2个回答
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函数。


0
投票

这取决于你如何加载DLL。

  • 如果它是通过导入表链接的,它将被加载并在需要它的依赖性时执行它的DllMain(在实际加载依赖项之前)。
  • 如果它是通过LoadLibrary加载的,它的DllMain将被执行。
  • 如果它是通过LoadLibraryEx和任何LOAD_LIBRARY_AS_DATAFILE加载,使用LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVELOAD_LIBRARY_AS_IMAGE_RESOURCE标志,将跳过DllMain

更多细节可以在the LoadLibraryEx documentation找到。

© www.soinside.com 2019 - 2024. All rights reserved.