スターデジオの録音(6)Shell32.dllのエラー解決!

エラー解決の目処が立たず、一時はShell32を使うのを諦め、ファイルのID3タグを直接読んでタイトルとアーティストを取得するしかないか、と覚悟したのだが、ID3.orgの仕様を読み始めてすぐにめげてしまった。ID3仕様の日本語訳を公開しているサイトも見つけたのだが…

そんなとき、このShell32の問題を自力で回避することに成功したという英語のブログの書き込みを見つけた。

BloggerのNerdy notesのエントリ(VB.NET: Shell32 code compiled on Vista does not
run on XP/2003)参照

つまり、ShellClassのインスタンスを作成するのに

Dim shell As New ShellClass()

の代わりにActivatorクラスのCreateInstanceメソッドを使って

Dim ShellAppType As Type = Type.GetTypeFromProgID("Shell.Application")

Dim Shell As Object = Activator.CreateInstance(ShellAppType)

とするとうまくいくらしい。

早速試してみると………なんと、うまく動くではないか!ありがたい!さすがインターネットの世界はすばらしい。

ということでなんとか、mp3の曲がiTunesに登録されているかをチェックするプログラム"iTCheck"が完成したのだった。

3 COMMENTS

masa21_gou

こんばんは、いきなりコメント失礼します。
私も同じ問題にぶつかって、恐らく同じページを探して対処したのですが、以下の問題でうまく取得できなくなりました。

Dim ShellAppType As Type = Type.GetTypeFromProgID(“Shell.Application”)
Dim Shell As Object = Activator.CreateInstance(ShellAppType)
Dim f As Folder = Shell.NameSpace(folderName)

item = f.ParseName(fileName)

上記の変数fのフォルダオブジェクトを参照に行くところで、fがNullのようで落ちてしまいます。
Shell.NameSpaceに渡しているのが変数であるのが問題なようで、パスを直接記述すればうまくいきます。
上記点はどのように記述されていますか。

いきなりですみませんが教えてください。

返信する
sora

masa21_gouさん、こんにちは。
ご質問の件、私も同様な問題にぶつかり、試行錯誤の結果、変数にToStringメソッドを指定したらうまく動きました。
但しなぜToStringが必要なのかは深く追求していませんのでご容赦を。m(_ _)m
ちなみに当該部分の私のコーディングを載せておきます。
Dim f As Shell32.Folder = oShell.NameSpace(TextBox1.Text.ToString)

返信する
masa21_gou

返答ありがとうございました。
見事解決いたしました。

Stringの変数にToStringを使うのは盲点でした。
何故うまくいくんでしょうか。
ちょっと腑に落ちないですが、まあ、うまく動作したからいいかって。。。
ちょっとは調べた方がいいですね。

感謝です。m(__)m

返信する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)