Visual C++ では、リンク時に特定の .obj を指定することで CRT の挙動を変更できるようになっている。これをリンクオプションと呼ぶらしい。
VC++ 6.0、VC++ 2002/2003、VC++ 2005/2008 では、それぞれ new/delete の挙動が違う。メモリ不足の時、6.0 では new は例外を投げずに NULL を返す。2002/2003 では、libc とリンクしたときは NULL を返すが、libcp とリンクしたときは例外を投げる。2005/2008 では、libc とリンクしたときも例外を投げる。リンクオプションとして、2002/2003 では thrownew.obj が指定でき、2005/2008 では nothrownew.obj が指定できるようになっている。なかなかややこしい。
ちなみに、WDK 6001.18002 は、cl.exe のバージョンは 14 で VC++ 2005 と同等だが、lib ディレクトリには thrownew.obj があることから、CRT の挙動は VC++ 2003 と同じと思われる。
未整理。
テレビの音声を iPod で聞こうとしたが、ファイル形式が悪いのか再生できなかった。AAC を MP4Box で MPEG-4 コンテナに入れて、拡張子を .m4a にしてから iTunes に登録したところ、PC 上では問題なく再生できたのだが、iPod では再生できなかった。iTunes で AAC に再エンコードしたところ、こちらは問題なく再生できた。mp3infp で両者の違いを調べてみた。
形式 | Track | サンプリングレート | |
---|---|---|---|
iPod 再生不可 | MPEG-2 AAC | 101 | 48kHz |
iPod 再生可 | MPEG-4 AAC | 1 | 44.1kHz |
さて、何が再生できない原因だろう。
Haali Media Splitter で MP4 (.m4a) を再生してみたのだが、mp3infp で入力したタグが取得できないようだ。MP4 のタグが読める DirectShow フィルタが欲しいがあるのだろうか。
テレビの音声をそのまま取り込むと、CD に比べて音量が小さい。aacgain というものを使って音量を調整してみた。iPod でも音量の変更が反映された。
Win2k の msvcp60.dll についてもう少し調査。VS6 SP4 や VS6 SP6 の vcredist.exe を実行しても、Win2k には msvcp60.dll をインストールすることはできないようだ。
vcredist.exe /C /T:c:\tmp
のように実行すれば、ファイルを取り出すことができるので、それを手動でシステムディレクトリにコピーすることで一応はインストールできる。しかし、バージョンを確認してみたところ、謎が・・・。
VS6 SP6 の vcredist.exe に含まれている msvcp60.dll のバージョンは 6.0.8972.0 だが、現在常用している Win2k 環境にインストールされている msvcp60.dll のバージョンは 6.2.3104.0 だった。別の XP 環境を確認すると、同じく 6.2.3104.0 だった。何を入れたらこれがインストールされるのだろうか?
MFC と SSE2 を使っていて、VC++ 7.1 でビルドされているプログラムを、WDK でビルドすることで VC++ 7.1 のランタイムを使わずに済むようにしてみようとした。WDK 付属の MFC は MFC 6.0 相当で古いため、一部修正が必要だった。sources ファイルの書き方にも少々苦労したが、何とか WDK でビルドできるようになった。早速 Vista 上で実行してみたところ、スタックオーバーフローで落ちてしまった。WDK ではスタックサイズが通常よりもかなり小さくされているのが原因だった。スタックサイズを通常と同じ 1MB に設定したところ、動くようになった。
次に Win2k で実行しようとしたところ、msvcrt.dll に __libm_sse2_sin が見つからないと言われて起動できなかった。WinXP でも同様だった。Win2k/XP の msvcrt.dll には SSE2 関連の関数がないようだ。
ランタイムの配布/インストールの手間を省くために WDK を使おうとしたのに、Vista でしか動かないものになってしまった。残念。
現在の TvqDec.ax は、VC++ 7.1 のランタイムライブラリ (msvcr71.dll, msvcp71.dll) が必要となっている。代わりに VC++ 6.0 のランタイムライブラリ (msvcrt.dll, msvcp60.dll) を使用するようにするために WDK でビルドしてみることにした。
WDK 6001.18002 の Win2k 用のビルド環境でビルドすると、実行ファイルのサブシステムバージョンが 5.0 に設定されるため、Win98 などの古い環境では動作しなくなる。sources ファイルで SUBSYSTEM=4.0 と指定してみたところ、NT4 用のライブラリがないために、リンクエラーになってしまった。editbin で次のようにして、サブシステムバージョンを書き換えてみたところ、Win98SE でも動作するようになった。
editbin /subsystem:console,4.0 /release TvqDec.ax
今になって気付いたが、Win2k では VC++ 6.0 のランタイムライブラリの内、msvcrt.dll は最初からインストールされているが、msvcp60.dll はインストールされていないようだ。WinXP 以降ならば、msvcp60.dll も最初からインストールされているようだ。
VS6 SP4 のランタイムは「Vcredist.exe による Visual C++ アプリケーション用の最新ランタイム コンポーネントのインストール」から入手できる。VS6 SP6 のランタイムは単体では公開されていないが、SP6 の分割ダウンロードの中の Vs6sp6S1.exe の中に vcredist.exe という形で含まれている。
MP4Box を使った mp4 の結合方法を色々試行錯誤。MP4Box で単純に結合すると、映像と音声の長さが微妙に違うせいで多数のファイルを結合するようなときに映像と音声がどんどんずれてしまう。
結局以下のような手順になった。ここでは、input01.mp4, input02.mp4, input03.mp4 の3ファイルを結合する例を示す。
1つ結合するたびに映像・音声の長さを調べて、1つずつ結合していくため手間が掛かるが、これ以外の方法はうまくいかなかった。例えば、入力全ての映像・音声の長さを先に調べて、一度に全て結合した場合は、結合点で誤差が出るのか結局映像と音声がずれてしまった。:delay=xxx で映像と音声の遅延を調整する方法も試してみたが、再生ソフトが遅延指定を認識しなかったりしたためうまくいかなかった。
いつのまにか、REX-CFU1 の後継の REX-CFU2 というものが出ていたようだ。USB チップが SL811HST から変更されたようだが、何に変更されたのかは不明。Linux 用ドライバも無いようだ。
そういえば、REX-CFU1 の Windows 用ドライバを作ろうとして、そのまま放置中だな。
日本のマスコミはゴミばかり。NHK も信用に値しない。
Google Chrome を試してみた。インストール先が、C:\Program Files 以下ではなく、C:\Documents and Settings\(USERNAME)\Local Settings\Application Data\Google\Chrome という点にまずびっくり。検索設定のインポートで
少し使ってみたが、確かに応答が非常に早い。今までのブラウザとはレベルが違う。ただ、1タブ 1プロセスとなっており、1プロセスあたり 10MB 以上のメモリを使っていることから、タブを何十個も開くような使い方にはあまり向いていないかもしれない。
Adobe Reader や Java の動作に難あり。今後に期待。
XML::RSS で日本語が化ける件をもう少し調査。encode_output=>0 を指定すればよいらしい。
気まぐれで、Cygwin 上で動くテキストブラウザを2つばかり試してみた。1つ目は lynx。日本語の扱いに難あり。日本語が扱えないわけではないが、文字コードの自動判別がうまくいかないのかよく文字化けする。また、UTF-8 はまともに表示されない。2つ目は w3m。日本人が作っているだけあって、日本語は問題なく表示できる。テキストブラウザでありながら、タブやマウスが使えるのが驚き。
何となく FT245RL USBパラレル変換モジュールを買ってみた。使い道は全く考えていない。
最近会社で使っている装置で、パラレルポート経由で操作するものがある。パラレルポートを搭載した PC が少ないため、不便な状態になっている。会社の方はうまくやりくりすることにして、別途パラレルポート関連の情報を少し調査してみた。
先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 1337通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 2通(0.1%)。spam が増加傾向。