VC++のフォームベースアプリケーションでiTunesのCOMアプリ作成(昨日の続き)

なんとか、動くところまで持っていくことができた。
C++の文法が分かっていないのか、最近そういうものなのか、わからないけど、基本的に、iTunesのCOMを使っている人はVC++ではやっていないようだということはわかった。ネットに情報はほとんど転がっていない。

で、かろうじて、最低限の情報が2chで得られたので、そこから発展させて、エラー取って動かすことができた。

まず、Appleからダウンロードした、iTunesCOMSDKはヘルプ以外、使わなくてよい。いらない。

で、プロジェクトのプロパティで、参照の追加、というので、COMのタブを選択する。リストをグリグリとしているとiTunes(10.2.1.1が動いている現在の環境では1.13というバージョンになる)が追加できるので、その参照を追加する。

#using <./Interop/Interop.iTunesLib.1.13.dll>

というのをiTunesにアクセスするコードを書くファイルに書く。#includeのようなものか?まじないか?数字のバージョンはiTunesのバージョンが上がっていったり開発環境で変わると思われる。少し前のiTunesとVC#2008 Expressで作ったファイルのバージョンは1.12だった。

で、動くコードを書いておく。


iTunesLib::IiTunes^ iTunes = gcnew iTunesLib::iTunesAppClass();
iTunesLib::IITPlaylistCollection^ pls = iTunes->LibrarySource->Playlists;
iTunesLib::IITPlaylist^ pl = pls->ItemByName["TEST PLAYLIST"];
for (int i = 1; i <= pl->Tracks->Count; i++) {
ListViewItem^ item = gcnew ListViewItem(pl->Tracks[i]->Name);
item->SubItems->Add(pl->Tracks[i]->Artist);
item->SubItems->Add(pl->Tracks[i]->Album);
listView1->Items->Insert(0, item);
}

アプリケーションオブジェクトの取得、プレイリストコレクションの取得、「TEST PLAYLIST」という名前のプレイリストオブジェクトを取得、そして、そのプレイリストの一覧をリストビュー(詳細表示モードにしてある)に表示している。

はまったのが、pls->ItemByName[“TEST PLAYLIST”];この部分。メソッドだから、とpls->ItemByName(“TEST PLAYLIST”);このように関数呼び出しの形にしていたのだが、すると、getというメソッドをパラメータゼロで呼び出せませんとリンクエラーになる。

そんなものを呼んでいる覚えはないのだが。

C++が知らない間に進化したのか?COMの魔法?オブジェクトブラウザにはItemByName(String Name) {get;} のように書いてある。

わからなかったが、Googleで検索すると、Excelの例で、[]を使えば良いという質問・回答の例があったのでそのようにしたらコンパイル・リンクが通り、実行できたというわけだ。

C++勉強しなおす必要があるな、と思った次第。

コメント