none
フォントの置換について RRS feed

  • 質問

  • いつもお世話になっています。

    Win2K、VisualC++6.0で印刷プログラムを作ったのですが、文字抜けが発生し困っています。

    印刷する文字列で指定しているフォントがシステムに無いフォントなのですが、これは問題がありますか?

    自分は、システムに無いフォントが指定された場合、OSが似たようなフォントに勝手に置き換えてくれるものだと思っているのですが、間違いでしょうか?

    OSがやるのだとしたら、失敗することはあるのでしょうか?

    印刷文字抜けは毎回発生するのではなく、数千枚印刷してから不定期に発生します。

    最初は、メモリリークかと思い、パフォーマンスカウンタでいろいろモニタしたのですが、特に問題があるようには思えません。(AvailableBytesが600Mくらい残っています)

    ただ、文字抜けが発生した直後のPC状態は自作アプリで使用しているフォントも2byteコードを表示できないようになっていました。
    また、タスクマネージャ等の値で特におかしなものは見つかりませんでした。

    フォントの置換が失敗というかなにか起こっているのだと思うのですが、これをデバッグする方法はありますか?

    どなたかご教授ください。よろしくお願いいたします。

     

    2007年2月13日 15:24

すべての返信

  • リソースリークがないかどうかも確認してみてはいかがでしょうか。
    とりあえずタスクマネージャでGDIオブジェクト等の数をチェックしてみるとか。リークを検出するためのツールを導入できるのなら、そのほうが楽チンです。

    2007年2月13日 22:47
  • nmasaoさん、アドバイスありがとうございました。
    教えていただいたようにタスクマネージャにてGDIオブジェクトをモニタしたところ、ビンゴでした。

    印刷の際、「印刷一枚毎に出力先のプリンタを変更⇒印刷処理⇒プリンタを元に戻す」という処理をKB246772を参考に行っていますが、プリンタ変更のためのメッセージのブロードキャストが問題でした。

    使用しているのがHP-CompaqのPCなのですが、キーボードのイージーアクセスボタンを有効にする「CPQEADM.exe」という標準インストール常駐プログラムのGDIオブジェクトがプリンタ変更のメッセージをブロードキャストするたびに+1されていました。

    プリンタの変更は印刷一枚につき、変更・元に戻す処理の計2回ずつやっていますので、一枚印刷するごとにCPQEADMのGDIが+2されます。

    GDIオブジェクトはKB838283によれば10,000個まで使用できるといことですが、実際は7,500個前後まで増加し、その後は増えなくなります。もちろん7,500個時点でウィンドウがうまく描画されなかったり、メニューが表示されなかったりと挙動はおかしくなります。

    7,500個程度までしかGDIオブジェクトが増えないのはなぜでしょうか?
    逆にGDIオブジェクトを何個まで増やすことができるかを推測することは可能でしょうか?

    よろしくお願いします。

    2007年2月14日 10:16
  • CPQEADM.exeにリソースリークの不具合があるらしい、ということでしょうか。

    > 7,500個程度までしかGDIオブジェクトが増えないのはなぜでしょうか?

    このあたりを追求するよりも、リソースリークをそもそも起こさないようにすることが必要です。でも他所様のプログラムの不具合となると手を出せないですし、Compaqに現象を報告して不具合を修正してもらうしかないでしょうね…。

    それとは別に、今回の場合はWM_SETTINGCHANGEをブロードキャストする必要はないように思えます(プリンタを変更してから自分で?印刷し、終わったら元に戻しているようなので)。メッセージを投げなければCPQEADM.exeの不具合も起きないでしょうから、私だったらそういう方法で逃げます。(^_^;

    2007年2月14日 22:53
  • nmasaoさん、度々のアドバイスありがとうございます。

     > それとは別に、今回の場合はWM_SETTINGCHANGEをブロードキャストする必要はないように思えます(プリンタを変更してから自分で?印刷し、終わったら元に戻しているようなので)。メッセージを投げなければCPQEADM.exeの不具合も起きないでしょうから、私だったらそういう方法で逃げます。(^_^;

    そうですね。とりあえずは詳細な原因追求はメーカーさんにおまかせして、ソフトはブロードキャスト無しで対策します。

    いろいろありがとうございました。
    またよろしくお願いいたします。

    2007年2月15日 0:09