在我的 Qt 应用程序中,我使用使用 Microsoft.DirectX 库的 COM 包装的 .net 程序集。当我启动我的应用程序时,它会崩溃并在输出中显示以下详细信息
<mda:msg xmlns:mda="http://schemas.microsoft.com/CLR/2004/10/mda">
<!--
DLL 'D:\MyAppPath\..\Microsoft.DirectX.dll' is
attempting managed execution inside OS Loader lock. Do not attempt to run
managed code inside a DllMain or image initialization function since doing so
can cause the application to hang.
-->
<mda:loaderLockMsg break="true"/>
</mda:msg>
myApp.exe has triggered a breakpoint
据我所知,.Net 的 Microsoft.DirectX 库是 1.1 版本,程序集是 4.0,这是问题的根源。
我尝试在简单的 c++ winForms 应用程序中使用这个程序集,通过添加带有以下代码的 app.config 文件解决了同样的问题
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
但 Qt 似乎不支持 app.config 文件。如何在 Qt 配置中设置这个useLegacyV2RuntimeActivationPolicy ?我尝试通过 QSettings 并没有成功。或者 Qt 可能还有其他一些解决方法?
我还尝试禁用 LoaderLock 异常(Debug->Exceptions->Managed Debugging Assistants)。但它也没有成功。
谢谢