gdi 関数から奇妙なアクセス違反が発生しています。私のアプリケーションはグラフィック エンジンのようなもので、複数のスレッドが異なるグラフィック オブジェクトの描画を要求します。1 つのスレッドがすべてのグラフィック オブジェクトをメモリ DC に描画します。これらのスレッド間の同期は正しいです。
userdump を用意したところ、2 つのスレッドからアクセス違反が発生しました。以下は、GetTextExtentPoint32 と CreateFontIndirect の 2 つのスレッドのコールスタックです。
// Access violation from Draw Request thread.
ntdll!KiUserExceptionDispatcher+0xe
ntdll!RtlRaiseStatus+0x26
ntdll!RtlpUnWaitCriticalSection+0x3b
ntdll!RtlLeaveCriticalSection+0x1d
gdi32!GdiRealizationInfo+0x88
lpk!FontHasWesternScript+0x1e
lpk!LpkUseGDIWidthCache+0x89
gdi32!GetTextExtentPointWInternal+0x100
gdi32!GetTextExtentPoint32W+0x18
// Access violation from Drawing thread.
ntdll!KiUserExceptionDispatcher+0xe
ntdll!RtlRaiseStatus+0x26
ntdll!RtlpWaitForCriticalSection+0x204
ntdll!RtlEnterCriticalSection+0x46
gdi32!CreateFontIndirectExW+0x26
gdi32!CreateFontIndirectW+0x61
GetTextExtentPoint32 と CreateFontIndirect がクラッシュする原因として考えられるものは何ですか? アプリケーションでアクセス違反が 2 回発生したことはありません。それはどのように起こりますか?このアプリケーションはほぼ安定しており、これらの点からアクセス違反が発生したことはありません。アクセス違反を取得するために CreateFontIndirect( NULL ) を呼び出そうとしましたが、クラッシュしていません.理由を見つけるのを手伝ってください..