VBからDirectShowを使うやり方を書いた「DirectShow for Visual Basic」というページを見つけたので、VBAで試すことにした。
DirectShow にアクセスするためのコントロールが用意されています、それが Quarts.dll です。これを使う際には Visual Basic の [プロジェクト] → [参照設定…] で 「ActiveMovie control type library」 をチェックしてください。
DirectShow for Visual Basic
さっそく「ActiveMovie control type library」(実体はquartz.dll)を参照設定しようとすると…
へ??
もう一度、参照設定ウインドウを開いてよく見ると…
なんでDLLがドキュメントフォルダにあるんだ??
実際にあるのか確認するが、やっぱりドキュメントフォルダになんかなくて、「C:\Windows\System32」(と「C:\Windows\SysWOW64」)にちゃんとある。つまり、嘘っぱちのパスが表示されてるわけで、そりゃそのまま登録しようとしたらエラーになるわ。
とりあえず再登録できないかと「regsvr32」したが効果なし。しかたないのでレジストリを直接いじることにした。
レジストリを検索して「HKEY_CLASSES_ROOT\TypeLib」の「quartz.dll」の登録を見ると、ファイル名しか入っていない。
付近のキーを見たら「%SystemRoot%\System32\」とちゃんとパスが入っているので、これが原因らしい。
キーにアクセス制限がかかっているのでまずアクセス権を変更してからパスを入力した。
で、再び参照設定ウインドウを開くと…
なんでーーー!? ドキュメントフォルダのパスの下にさっき入力したのがそのまま繋がっていた…。環境変数理解してくれないの…?さっき見たキーのは環境変数使ってたのに、なんでquartz.dllのキーは駄目なの…。
しかたないので、フルパスをちゃんと入力。今度こそ…
ε-(´∀`*)ホッ
正しいパスになって、無事登録できました。レジストリのアクセス権を元に戻して作業完了。
しかし、なんでquartz.dllのパスの登録がファイル名だけになってたんだろ…?検索しても何もヒットしなかったので、他の人はこんな目には合ってないらしい。俺何かしたかな…?さっぱり思い出せん。
コメント
こんにちは
上記と同じ現象に困りこちらにたどり着きましたが、regsvr32もレジストリの修正も試しましたが解決に至らず困っています。
こんにちは。
>上記と同じ現象
というのは
「参照設定ウインドウで表示されるDLLの場所がおかしい」
ということでいいのでしょうか。
その場合、レジストリを操作しても治らないとなると、自分に思いつくのは以下の2点くらいです。
参照設定ウインドウで表示されるDLLの場所は正しいのに
「DLL 読み込み時のエラーです」が表示されるのだとしたら、
このブログで書いている内容とは別の原因ということになります。
こちら↓はチェックされたでしょうか。
DLL 読み込み時のエラーです (エラー 48)