我使用我的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中创建一个线程也是一个灾难的秘诀。
谢谢!