我在我的COM DLL中收到一些 DLL_THREAD_ATTACH通知,但是从应用池工作线程 none ,实际调用了我的COM DLL。< / p>
随后,从IIS启动的DLL调用到达从未调用DLL_THREAD_ATTACH的线程。
当DLL附加到dllhost.exe时(通过DLL_PROCESS_ATTACH),只通知应用程序池的第一个线程。
这是缺陷还是功能,是否有解决方法?
答案 0 :(得分:2)
DLL_THREAD_ATTACH
经常被误解。您没有提供足够的信息,但很可能是您的问题是由于:
来自MSDN documentation,强调我的:
DLL_THREAD_ATTACH | 当前流程正在创建新主题。
在同一页面上:
在某些情况下,即使从未使用DLL_THREAD_ATTACH为该线程调用入口点函数,也会为终止线程调用入口点函数:
- 线程是进程中的初始线程,因此系统使用DLL_PROCESS_ATTACH值调用入口点函数。
- 线程在调用LoadLibrary函数时已经在运行,因此系统从未调用它的入口点函数。
要解决此问题,您可以在DLL_PROCESS_ATTACH
时手动枚举进程的每个线程。在新线程上调用DLL函数时,也可以首次执行init。显然,如果可能的话,你也可以在加载DLL之后创建线程。