Windows のマルチ スレッドを利用して EMF 形式でスプールされるプリンタに印刷を行った際、フォントの設定が正しく反映されない場合がある

現象

Windows Vista、Windows Server 2008、Microsoft Windows XP および Microsoft Windows 2003 のマルチ スレッドを利用して、EMF 形式でスプールされるプリンタに印刷出力した際に、アプリケーションが指定したフォントの設定が正しく反映されない場合があります。

この現象は、Windows 7 および Windows Server 2008 R2 では発生しません。

原因

この現象は、印刷の処理において EMF ファイルを作成する際に、内部で使用されている SelectObject() で取得したレコード出力を、スキップしてしまうために発生します。

SelectObject() に関するレコード出力をスキップする設定は、内部フラグを利用して設定されますが、この内部フラグがグローバル変数であるために、 フラグがオンの場合は、同一プロセス内のすべてのスレッドから SelectObject() に関するレコード出力がスキップされます。そのため、内部フラグがオンの場合には、マルチスレッドで動作している別のスレッドでフォントの変更が必要な際にも、SelectObject() に関するレコード出力がスキップされてしまい、意図しないフォントが選択されます。

回避策

この現象を回避するには、以下のいずれか方法を実行してください。
  • 印刷処理の実行時には、マルチ スレッドを利用しない。
  • 印刷出力をする際には、EMF 形式のスプール ファイルを利用せず、RAW 形式のスプール ファイルを利用する

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:2464767 - 最終更新日: 2016/10/04 - リビジョン: 1

Microsoft Windows XP Home Edition, Microsoft Windows XP Professional, Microsoft Windows Server 2003, Datacenter Edition (32-bit x86), Microsoft Windows Server 2003, Datacenter x64 Edition, Microsoft Windows Server 2003, Enterprise x64 Edition, Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft Windows Server 2003, Standard x64 Edition, Microsoft Windows Server 2003, Standard Edition (32-bit x86), Windows Vista Business, Windows Vista Enterprise, Windows Vista Home Premium, Windows Vista Starter, Windows Vista Ultimate, Windows Server 2008 Datacenter, Windows Server 2008 Enterprise, Windows Server 2008 Standard

フィードバック