テキスト レンダリングにDirectWriteを使用する、かなり大規模で複雑なコードベースを扱っています。関係あるかどうかはわかりませんが、これは WinRT (Windows ストア) アプリケーションです。
アプリはマルチスレッドであり、一部の DirectX 呼び出しはバックグラウンド (UI ではない) スレッドから実行されます。すべてのBeginDrawおよびEndDraw呼び出しはUI スレッドから行われ、一部のDrawText呼び出しはバックグラウンドスレッドから行われます。これらの呼び出しが重複しないようにし、DrawText は BeginDraw と EndDraw のペアの間でのみ呼び出されるようにしました。
ただし、DrawText メソッドを呼び出すと、 SEHExceptionが発生することがあります。UI スレッドから呼び出された場合は発生せず、バックグラウンドスレッドから呼び出された場合のみ発生します。
これは、すべてのコンピューターで発生するわけではありません。一部のデバイスでは頻繁に発生し、他のデバイスではまったく再現できません。
VS Debugger が言う正確なメッセージは次のとおりです。 DrawText 呼び出しで d2d1.h ヘッダー ファイルが壊れます。
SEHException がスローされたときに問題をデバッグまたは診断する方法はありますか? (これは、バックグラウンド スレッドから DrawText 関数を呼び出すことに明らかに関連しています。)
また、バックグラウンド スレッドから DirectX 関数を呼び出す一般的な規則はありますか? (D2D1Factory が D2D1_FACTORY_TYPE_MULTI_THREADED オプションで作成されることを確認しました。)