![](/img/trans.png)
[英]Are other threads suspended during DLL_THREAD_ATTACH in dllmain
[英]DLL_THREAD_ATTACH not called when a COM DLL is invoked via IIS app pool w3wp.exe
我在COM DLL中收到一些 DLL_THREAD_ATTACH通知,但没有从应用程序池工作程序线程中获得任何通知,而实际上是从这些线程调用我的COM DLL。
随后,从IIS启动的对DLL的调用到达从未调用过DLL_THREAD_ATTACH的线程。
当DLL附加到dllhost.exe(通过DLL_PROCESS_ATTACH)时,仅通知应用程序池的第一个线程。
这是缺陷还是功能,是否有任何解决方法?
DLL_THREAD_ATTACH
常常被误解。 您没有提供足够的信息,但是您的问题很可能是由于以下原因:
从MSDN文档中 ,重点是:
DLL_THREAD_ATTACH | 当前进程正在创建一个新线程 。
在同一页上 :
在某些情况下,即使从未使用线程的DLL_THREAD_ATTACH调用入口点函数,也要为终止线程调用入口点函数:
- 线程是进程中的初始线程,因此系统使用DLL_PROCESS_ATTACH值调用了入口点函数。
- 调用LoadLibrary函数时该线程已经在运行,因此系统从未为其调用入口点函数 。
要解决此问题,您可以在DLL_PROCESS_ATTACH
时手动枚举进程的每个线程。 您也可以在新线程上调用DLL函数时进行首次初始化。 显然,如果可能的话,还可以在加载DLL之后创建线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.