CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

コンピュータ全般

GetDefaultPrinter

投稿日:

印刷系のアプリは奥が深い。
勢いで、仕事に直結した話を書いてみよう。
Win32APIでGetDefaultPrinterがある。
第1引数にNULLを渡すと、第2引数のDWORDポインタにプリンタ名の
バイト数が戻るはずだった。
実際戻ってくるのはバイト数ではなく、半角全角の区別がない文字数だった。
2バイト文字交じりのプリンタ名の場合、足りないメモリサイズとなり、
その後のプリンタ名取得でメモリが破壊されていたのに気付くのに、
約1ヵ月の時間を要してしまったのだ。
知る限り、VCのマルチバイトビルドのプロジェクトにおいて、
バイト数でなく文字数が返ってくるのは異例である。
この1ヵ月、旅行中も含めて、頭の中に居続けたテーマで、
今解決に至ったからこそ、吐き出してすっきりして、次のステップに進みたくて、
語ってみたくなったというわけだ。
PC起動直後に印刷系アプリを起動すると、不正終了する。
まれに、印刷系アプリの終了時にも不正終了するってのもあった。
IMEの設定、またはBluetoothのドライバのせいだというのは思い込みだった。
ヒープ破壊の例外コード、0xc0000374に惑わされてしまった。
再現性の頻度が低いながら、一定のルールで再現性がとれているという
非常にやっかいな現象だった。
メモリを取得して、必要な情報を得て、メモリを破棄する。
C言語の常識だけど、ヒープ破壊の温床でもある。
足りないメモリで情報を得たら、メモリが破壊されるのだ。
アホみたいに、固定の256バイトのバッファをとるほうがまだましだ。
人は問題に直面すると、それを誰かのせいにする。
人のサガであり、人たるユエンでもある。
APIの「説明が間違っている」「不足している」「動きがおかしい」。
自分以外を否定すれば、自分が正しいこととなり、心の安定につながるが、
そこに進歩はないと思う。
元プログラマー、現プロジェクトマネージャである自分の反省点。
ユーザーと最も近い位置にいる人物の気持ちに気付くのが遅かった。
最後まで辛辣な物言いを続けてくれて、最後には感謝の意を述べてくれた
その人物に更なる感謝の意をこの場を借りて述べておく。
特殊なPC環境、他アプリとの相性、未知の世界、自分の限界...。
あやうくあきらめそうにもなったが、最後まで戦えた自分が誇らしくもある。
なんて言うと、ちょっとオーバーか。
そんな区切りの今日、印刷系アプリの案件を持ってきてくれた後輩がいた
ことを思い出した。
ここ最近、この印刷系アプリに大いに振り回されていたので、
ちょいと後ろ向きかつ、無愛想な結論に持ち込んでしまったかもしれない。
来週早々にフォローして、印刷系アプリのさらなる深みに入ってみようと思う。

-コンピュータ全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

社内でマシン屋をやっていて得た実践ベースの役立つ知識

社内で慢性的にマシン(サーバー、PC)が不足している。一番大きいのは新しいマシンを買わせない会社の体制があるんだけど、担当者の管理が甘いってのもある。10~15年前に買って数年は使っていたんだろうけど …

no image

Androidデジカメ

ニコンCOOLPIX S800c を購入。 本体が35,800 円で、16GB SDHCカードが5,470円だったから、 トータルで41,270円なり。(ヨドバシ価格なので10%ポイント還元あり) 何 …

CDやDVDのファイルシステムにはCDFSとUDFがある(2)

先週書いた以下の記事でずいぶんと下調べしたと思っていたけど、結局それだけでは足りずに当日の製品媒体をDVDに焼く作業のなかで調査と試行錯誤をしなければならなかった。 CDやDVDのファイルシステムには …

ボーナス出たから32インチWQHDディスプレイを買った

【2020/5/6追記】 以下、HPの楽天市場店では売り切れになっていたので、HPオリジナルショップを紹介しておこう。税込みで27,390円だから、2019年12月時点でおいらが買ったときよりちょっと …

no image

小容量USBメモリ

フロッピーディスクに替わるメディアがなくて困っている。 書き込み可能、安価、配布することが可能なもの。 パソコンに必ず着いているインターフェースと言えば、USBポート。 ということで、USBメモリが一 …