![](/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.