VC++ ExpressでiTunesのCOMプログラミング

MacでiTunesを操作(データ取得)するアプリは2本ほど作ったけれども、同じようなものをWindowsでも動くようにしたいとおもい、Visual Studio 2010 Expressを使って作ってみることにした。

以前、Visual Studio 2008 ExpressのC# .NETで、自宅サーバにiTunesの再生履歴を送信することのできるアプリは途中まで作ったことがある。送信まではできるようにしたのだが、iTunesにアプリがアクセス中に、iTunesで曲のプロパティを見ていると例外が発生するという、脇の甘い作りで、まぁ、自分しか使わないから、と放置したおいた。

そのまま、Macしか使ってこなかったし問題なかったのだが、なんとなくAndroid向け母艦アプリも両方あった方がいいだろうということで、WindowsでiTunesを扱うアプリを書けるようになろうと思った次第だ。

今回はC++を選択。気分の問題。C++自体、使うのが久しぶり。言語仕様もnamespaceが加わったあたりから曖昧であまり分かっていない。昔からの部分は大丈夫だけど。

使ってみてびっくり。今時のVC++はフォームベースのアプリケーションが書けるようになっているとは。完全に浦島太郎状態だ。でも、逆にこれなら簡単にアプリがかけるかもしれない。

でも、逆にCOMの扱いにクセがあってビルドを通すのに半日かかった。

AppleからダウンロードしてきたヘッダとCソースをプロジェクトに加えて、適当にネットに転がってるサンプルらしきソースをペーストして、CLRと呼ぶらしいフォームベースのアプリケーションをビルドするが、リンクエラーになってしまう。

どうやら、昔からの書き方をした時と、フォームベースのアプリケーションで作った時で、COMの扱いが違う?変わる?らしいのだ。どちらかというとC#に近いやり方になるらしい。

で、プロジェクトにiTunesの参照を追加する。この時点では見た目が変わらない。ソリューションエクスプローラで、すべてのファイルを表示という真ん中のボタンをクリックすると、追加したiTunesLibが見える様になる。これがオブジェクトブラウザでC#の方と同じようにみえるので、これを使ってプログラミングをするらしい。

らしい、というのはまだコーディングしておらず、アプリケーションのオブジェクト生成の一行を2chからコピペしてビルドを通しただけだからだ。実コードはこれから書く。

コードの書き方はC++の文法にそったものになるのでそこだけが好みの問題になるのだろう。で、こうなってくると、C#で書くのとC++を選ぶのと利点はどちらにあるんだ?

C#のプロジェクトに既存のC++のソースを混ぜられないのならC++で書くしかないだろうし、混ぜられるならC#のが楽そう。そこまで調べるのは面倒なので、今回はC++を気分の問題で使ってみることにする。

コメント