我正在使用我的 P/Invoked LoadLibrary API 从我的 c# 代码调用 c++ DLL(不是我的代码)。但是当我运行应用程序时,正在检测到 LoaderLock 错误。
起初我将此归咎于我的 DllImport C# 包装器,但是当我尝试加载其他 C++ DLL 时,它工作正常。
我在网上阅读了一些关于 LoaderLock 的文章,似乎 #1 规则是不要在 DllMain 内做任何有趣的事情。当我检查 c++ DllMain 调用 DLL_PROCESS_ATTACH 和 DLL_PROCESS_DETACH 中的一些 API 时。
BOOL APIENTRY DllMain(
HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
StartAPI();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
ExitAPI();
break;
}
return true;
}
当我检查 StartAPI() 时,它有一大块代码并调用一个使用CreateProccessA创建进程的函数
这是我为什么会出现 LoaderLock 错误的真正原因吗?
有人告诉我 StartAPI() 应该在 DLL 初始化时运行,还有其他方法可以使这项工作吗?
我计划在另一个线程中调用 StartAPI(),但我读过在 DllMain 中创建线程也是灾难的根源。
谢谢!