VS2005 Express Edition が無料で配布されているので早速ダウンロード。

ここからDL Learn to Develop with Microsoft Developer Network | MSDN
ちなみにどうでもいいけど左側の Visual C++ とかかいてあるメニュー、リンク領域がもっと広いものだと思っていたら、文字列上にのみリンクが張ってあるので「リンク先をクリックしてもジャンプしない、IEのバグか?」と思ってしまった。
さらにどうでもいいけどMSのサイトはIEで見ないといけません。(義務)


.NET Passportとやらを登録しないと30日間しか使えません。

で、登録完了。Bata2のときも使ったけどやっぱりプロジェクト管理やら自動補完があるだけでだいぶいい。
といいつつ、やっぱり重いのでまだまだサクラエディタ使ってたりする。

プログラミングは作って覚えよう。 id:cotodama:20051028の続き。(昨日までほったらかし)

しかし、実際何を作ればいいのか?
これが最大の疑問である。(にちゃんにスレまでたってるし。)


そんなわけで少し前にCLANNADのBGMプレイヤー、デコーダの移植を思いついた。
バリエーションはC++(Win32API) D C♯ DirextShow(フィルター、俗に言うコーデック)
といっても単に人様が作ったソースを移植するだけだけど。
前回、プレイヤー部分は作ったので次はDLLである。
ある程度まとまったらHPとかにまとめてみようかな。

クラス

今回何とか MSDN(英語)を見ながらWin32APIを調べている。
今回はそんなにこったことはしないのでマルチスレッドもレジストリもWAVE周りも特に問題ない。
というかもっとややこしいかと思っていたけど意外と簡単。


問題はクラス設計である。
できるだけ汎用性を持たせたいがあまりやりすぎると明らかに無駄だったりする。
特にエラー処理が面倒くさい。例外を投げるにしろ、エラー値を返すにしろ、ファイル読み込みに失敗したら呼び出しもとのクラスでさらにそれに対処してさらにその呼び出し元…。
という感じで何回もエラーチェックしないといけない。


さらに抽象化するということは具体性が薄れるということなのでバグの元になったりする。

例えば次のコード。 単にレジストリからCLANNADのBGMのフォルダパスを取得するコード。


RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\KEY\\CLANNAD", 0, KEY_READ, &hkey);
RegQueryValueEx(hkey, "BGM_FOLDER", 0, &type, 0, &size);
RegQueryValueEx(hkey, "BGM_FOLDER", 0, 0, (LPBYTE)FolderPath, &size);
RegCloseKey(hkey); //クローズ

これはオープンとクローズという関数があるし、少しいじればいろんなキーから情報を取ってこれる。
しかし、かといってクラスにしてしまうと余計なオーバーヘッドが増えるし、(まあ今回は気にしなくてもいいけど。) エラー処理が面倒になるし、バグが増えそうだ。
うーん、クラス設計はなかなか難しい。