dllmain.cpp 1.1 KB

123456789101112131415161718192021222324
  1. // dllmain.cpp - DLL 入口
  2. // 重要:DllMain 在 Loader Lock 内部调用,严禁执行以下操作:
  3. // - LoadLibrary / LoadLibraryEx(递归加载导致死锁)
  4. // - 复杂 STL 操作(std::thread、std::mutex 动态初始化等)
  5. // - 任何可能触发其他 DLL 加载的调用
  6. // 因此 DllMain 仅做最必要的 DisableThreadLibraryCalls,
  7. // 所有初始化(Logger、MonitorManager 等)延迟到首次导出函数调用时执行。
  8. #include "pch.h"
  9. extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved) {
  10. switch (reason) {
  11. case DLL_PROCESS_ATTACH:
  12. // 禁用线程通知,避免每次线程创建/退出都进入 DllMain
  13. DisableThreadLibraryCalls(hInstance);
  14. break;
  15. case DLL_PROCESS_DETACH:
  16. // 注意:PROCESS_DETACH 时也在 Loader Lock 内,
  17. // 不在此处调用 FreeAll(否则首次构造 MonitorManager 会死锁)。
  18. // FreeAll 由上层在 FreeMonitor() 中显式调用,或进程退出时 OS 回收资源。
  19. break;
  20. }
  21. return TRUE;
  22. }