トップページ > 過去ログ > 記事閲覧
VC++6.0でDirectShowを使うには?
名前:Dixq 日時: 2009/08/28 22:53

今回VC++6.0でDirectShowを使いたいという事で質問させて頂きます。 コンパイルしたいプログラムは以前管理人様が提示されていたプログラムです。 h ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1000 このUSBカメラの画像を取り込むプログラムをVC++6.0で動かしたいと思っています。 現時点で、VisualStudio2008ExpressEditionでは動きました。 h ttp://dixq.net/zip/bbs/Camera.zip (動いたプロジェクト) しかし最新のPlatformSDKに入っているDirectShow関連のものは、VC++6.0に対応していないらしいのです。 2008と同じ手順で設定し、VC++6.0でコンパイルすると、 「struct CAPTUREDATA」から始まる定義の「 ICaptureGraphBuilder2 *pCapture;」の行でエラーが発生します。 そこでDirectShowがまだDirectX SDKに入っていた頃のバージョン「Summer 2004」のSDKをインストールしました。 (こちらは対応しているよう?) 必要な作業として、Sampleフォルダに入っているBaseClasses.dswを開き、ビルドして出来た Strmbase.lib、Strmbasd.libをオプションのリンカに登録しなければならないらしいです。 しかしいざ自分のPCのフォルダを見てみるとBaseClassesフォルダにあるプロジェクトファイルはBaseClasses.slnになっていました。 2008で変換してビルドすると、 「 1>.\ctlutil.h(278) : error C4430: 型指定子がありません- int と仮定しました。メモ: C++ はint を既定値としてサポートしていません 」 というエラーが出ます。 DirectX SDKのフォルダにインクルードパスとライブラリパス、リンカパスを設定すれば使えるようになるはずなのですが、 libファイルが生成できず、詰まっています; どう解決すればいいでしょうか・・。 VC++6.0でDirectShowを使う為の手順として以下の検索でいくつかヒットします。 h ttp://www.google.co.jp/search?hl=ja&q=DirectShow+VC%2B%2B6.0&lr= 後「strmbase.lib」「strmbasd.lib」「BaseClasses.dsw」などがキーワードになりそうです。 どうすればlibファイルが生成出来、無事使えるようになるでしょうか・・。 いや、コンパイル出来るようになれれば、手段は何でもいいのですが。 どうか、よろしくお願いいたします。

Page: 1 |

Re: VC++6.0でDirectShowを使うには? ( No.1 )
名前:Dixq 日時:2009/08/28 23:05

後、サンプルではUSBカメラが繋がっていなかった場合、異常をきたすのですが、 USBカメラが繋がっているかを先に調べる方法は無いでしょうか?
Re: VC++6.0でDirectShowを使うには? ( No.2 )
名前:IW 日時:2009/08/30 01:48

> プロジェクトファイルはBaseClasses.slnになっていました BaseClasses.dswがないのなら、vc6で新規にプロジェクトを作ればいいのでは? > error C4430 operator=(LONG); の行ですか? 戻り値がないので、C++としてはエラーになっているのでしょう。 COARefTime& operator=(LONG); としてみてください。 (でも今度は別のところでエラーが出そう……) > USBカメラが繋がっているかを先に調べる方法 管理人さんのサンプルを見ましたが調べてますよ、ちゃんと。 カメラがなければキャプチャデバイスの列挙に失敗するはずです。
Re: VC++6.0でDirectShowを使うには? ( No.3 )
名前:Dixq 日時:2009/08/30 15:03

ご回答ありがとうございます。 >vc6で新規にプロジェクトを作ればいいのでは? そうなんですよね; ただlibファイルを生成した事がないのと、沢山ファイルがあってどれをどのように 構築したらよいのかよくわからないのです; >COARefTime& operator=(LONG);としてみてください。 ありがとうございます。 今手元に環境が無いので、明日やってみます! >管理人さんのサンプルを見ましたが調べてますよ pData->pClassEnum == NULL または pData->pDevEnum == NULL の時、失敗ということかな・・と思ったのですが、 カメラが接続されていないと初期化関数の中の // 追加を行ったのでキャプチャフィルタの参照をリリース pData->pbf->Release(); の行でハンドルされてないとエラーが起こるのです・・。 どうしたらいいでしょうか;
Re: VC++6.0でDirectShowを使うには? ( No.4 )
名前:IW 日時:2009/08/30 21:14

> の行でハンドルされてないとエラーが起こるのです・ カメラが繋がっていない場合は pData->pClassEnum == NULLで引っかかると思ったのですが。 ならそこまでの各種 DirectShow関連の関数呼び出しの戻り値をチェックしたり、 オブジェクトを得る関数の時は、そのオブジェクトが NULLになっていないか チェックするコードに変更してみて下さい。 どこかで本当はエラーになっているかもしれません。
Re: VC++6.0でDirectShowを使うには? ( No.5 )
名前:Dixq 日時:2009/08/31 23:04

ありがとうございます。 VC++6.0で同じプロジェクトを作りたいのですが、 トライしてみたものの、どのように作ればよいものか・・。 どのように作れば同じプロジェクトが出来上がるでしょうか?;
Re: VC++6.0でDirectShowを使うには? ( No.6 )
名前:IW 日時:2009/09/01 01:47

vc6は大昔に使ったことがあるのですが、もうほとんど忘れてしまいました。 が、今の VisualStudioと拡張子は違えど、さほど変わりはなかったと思います。 cppをプロジェクトに突っ込んで、プロジェクトの設定を libにしてそのままビルドすればいいはずです。 細かい設定は vcprojの方の設定を見ながら対応している項目を設定していくしかないですね。
Re: VC++6.0でDirectShowを使うには? ( No.7 )
名前:Dixq 日時:2009/09/02 22:54

一つ一つエラーを潰してやっと出来ました〜(T_T まだ、これで実行させてみてないのでうまくいくかはわかりませんが、 一応libファイルは出来ました・・。 お世話になりました!
Re: VC++6.0でDirectShowを使うには? ( No.8 )
名前:Dixq 日時:2009/09/06 21:51

無事前述の問題はクリア出来たのですが、更なる問題が・・。 2004のものをインクルードパスに通すと以下のようなエラーが大量に出てきてしまいます; 1>c:\program files\microsoft directx 9.0 sdk (summer 2004)\include\d3dtypes.h(2072) : error C2365: 'D3DVBLEND_DISABLE' : 再定義; 以前の定義は '列挙子' でした。 1> c:\lib\dxlib\dxdirectx.h(1933) : 'D3DVBLEND_DISABLE' の宣言を確認してください。 1>c:\program files\microsoft directx 9.0 sdk (summer 2004)\include\d3dtypes.h(2073) : error C2365: 'D3DVBLEND_1WEIGHT' : 再定義; 以前の定義は '列挙子' でした。 手順は前述の通りで、特に間違った事はしていないと思うのですが・・。 ちなみに他のPCでも同じ手順で同じエラーが出ました。 VC++6.0ではなく、2008にし、インクルードパスを最新のプラットフォームSDKにするとエラー無くコンパイルできます。 何がいけないのでしょうか・・。 DXライブラリに昔のライブラリと互換性が無い・・とかの問題でしょうか?
Re: VC++6.0でDirectShowを使うには? ( No.9 )
名前:管理人 日時:2009/09/09 00:56

DXライブラリは DirectX SDK と競合しないようになっていますので、 恐らく、ただ単に Summer 2004 の SDK が VC6.0 では使用できないのだと思います。 ( 私の手元にある DirectX9.0 の一番最初の SDK では VC6.0 でも問題なくコンパイルすることができます ) いつから VC6.0 に非対応になったのかの正確なバージョンは覚えていません、すいません
Re: VC++6.0でDirectShowを使うには? ( No.10 )
名前:Dixq 日時:2009/09/14 06:30

ご回答ありがとうございます。 色々試しましたがやはり無理なようですね・・。 仕方ないので、2008でコンパイルすることとしました。 ありがとうございました。
Re: VC++6.0でDirectShowを使うには? ( No.11 )
名前:wish 日時:2009/09/14 16:00

解決した?ようですが、一応参考までに。 VC6.0上でDirectX Summer 2004 以降を使用する 場合、Extrasという追加プログラムが必要っぽいです ※MSDNはサイトをころころ変えるので  いつまでつながっているか定かじゃありませんが。。。 MSDN: ttp://www.microsoft.com/downloads/details.aspx?FamilyID=736585e1-10f0-4e85-b940-828cba9971f1&displaylang=en ちょうどこのころDirectX9のインターフェイスが 一掃されて泣いた記憶がありますが。。。 開発環境を変えたくない人ようだと思います。 VC6も10年以上も前のツールですし、 今は無料で使えるVC2008とか出てますし、 わざわざ古いものでコンパイルしなくても いいかもしれませんね。(^^;
Re: VC++6.0でDirectShowを使うには? ( No.12 )
名前:Dixq 日時:2009/09/15 09:17

wishさん ご回答ありがとうございます。 なるほど・・時々みかけるExtraは何の為にあるのだろうかと思っていたのですが、 そういうことだったのですね。 VC++6.0を使う必要があったのですが、 今回は2008を使用することにしました。 ありがとうございました。

Page: 1 |