簡體   English   中英

通過IIS應用程序池w3wp.exe調用COM DLL時未調用DLL_THREAD_ATTACH

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM