gpt4 book ai didi

c++ - 通过 IIS 应用程序池 w3wp.exe 调用 COM DLL 时未调用 DLL_THREAD_ATTACH

转载 作者:可可西里 更新时间:2023-11-01 11:49:09 25 4
gpt4 key购买 nike

我在我的 COM DLL 中收到一些 DLL_THREAD_ATTACH 通知,但没有来自实际调用我的 COM DLL 的应用程序池工作线程。

随后,从 IIS 发起的对 DLL 的调用到达从未调用过 DLL_THREAD_ATTACH 的线程。

当 DLL 附加到 dllhost.exe(通过 DLL_PROCESS_ATTACH)时,仅通知应用程序池的第一个线程。

这是缺陷还是功能,是否有任何解决方法?

最佳答案

DLL_THREAD_ATTACH 经常被误解。您没有提供足够的信息,但您的问题很可能是由于此造成的:

来自MSDN documentation ,强调我的:

DLL_THREAD_ATTACH | The current process is creating a new thread.

在同一页上:

There are cases in which the entry-point function is called for a terminating thread even if the entry-point function was never called with DLL_THREAD_ATTACH for the thread:

  • The thread was the initial thread in the process, so the system called the entry-point function with the DLL_PROCESS_ATTACH value.
  • The thread was already running when a call to the LoadLibrary function was made, so the system never called the entry-point function for it.

要解决此问题,您可以在 DLL_PROCESS_ATTACH 时手动枚举进程的每个线程。当在新线程上调用 DLL 函数时,您也可以执行第一次初始化。显然,如果可能的话,您也可以在加载 DLL 之后创建线程。

关于c++ - 通过 IIS 应用程序池 w3wp.exe 调用 COM DLL 时未调用 DLL_THREAD_ATTACH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com