ある出来事を一つ。
ある要望があったのでポスターのデザイン(単に文字だけ書いたものですが)を作ってそのデータをUSBメモリに入れて持って行ってもらいました。
とりあえずフォーマットがわからないので適当に選んでみたのが
- PDFファイル(ベクタフォーマットだし)
- PNGファイル(上が読めなかったときの保険)
・・・まあ、後者は微妙ですが前者なら普通のはずですのでこれでいいだろうと思いました。
ところが相手側のプリンタで印刷させようとすると、「ファイルが開けない」といわれました。
というわけでちょっと確認してみる。
「OSは何?」 「Windows98」
・・・まだあったのか~。
と感嘆していても意味がないのですが、ある程度の人なら知っていると思いますが、Windows98でPNGファイルは標準では開けません。
ネットにもつなげるわけもなく(コンピュータウィルスに感染してさようならですし)、そりゃ印刷もできないよね・・・と。
その前に、何でそんなOSがあるPCが未だにあるんでしょうか?という質問文をたたきつけたくなりました。
で、自分の作業ではいろんな部分に見つかる64bit兼用のソースコード上でのゆがみです。
特にひどかったのがファイルを扱う部分での64bit処理の部分ですね。
64bitの場合は直接64bitの値を扱ってもかまわないのとWin2k以上のOSであることが保証されているので
GetFileSize => GetFileSizeEx
SetFilePointer => SetFilePointerEx
といった64bit変数を使うWinAPIを使えるのですが、その部分が前のバージョンでは直されていないことが発覚してがんばって共通コードと部分コードでの修正を行うことに・・・。
もう一つ面倒なのはファイルから文字列を汎用的に読み込む処理ですね。さすがにファイルの文字コードをShiftJISとは仮定できなくなるので、
必要に応じてファイルの読み込みを行った後で内部文字コードへの変換が必要です。この処理はランタイムでやるときは自動でやってくれる(と思う)のですが、
自前での実装が必要なとき(自前アーカイブからの読み込みなど)はちゃんと判別してやらないと後々大変なことになりますので気をつけないと・・・。