VC++2003/WindowsXP/DirectX9.0cSDK環境で、DirectShowでAVI表示、画像を加工するフィルターを通して画面出力、という処理を行いたいと思います。
http://www.greenwood.co.jp/~k-aki/pc/directshow_movie/directshow_movie.html
こちらのサイトの 「6 Rendererを作る」のソースを参考に・・・というか GrabRenderer.h と GrabRenderer.cpp をほぼそのまま貼り付けてコンパイルしてみたのですが、以下のリンクで以下のエラーが発生し、これが解決できません。
strmbasd.lib へのリンクはちゃんと通っているようなのですが、他に何をすればよいのか、教えていただけないでしょうか?
error LNK2001: 外部シンボル ""public: virtual long __stdcall CBaseFilter::QueryVendorInfo(wchar_t * *)" (?QueryVendorInfo@CBaseFilter@@UAGJPAPA_W@Z)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual long __stdcall CBaseFilter::JoinFilterGraph(struct IFilterGraph *,wchar_t const *)" (?JoinFilterGraph@CBaseFilter@@UAGJPAUIFilterGraph@@PB_W@Z)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual long __stdcall CTransformFilter::FindPin(wchar_t const *,struct IPin * *)" (?FindPin@CTransformFilter@@UAGJPB_WPAPAUIPin@@@Z)" は未解決です。
よろしくお願いします。
Visual Studio 2002のVC++でActiveXを作成し、VBから利用しようとしています。
コントロールにメソッドを追加したのですが、VBから参照可能になりません。
idlファイルにメソッドの定義が追加されていないので、
このためだと思うのですが、正しい手順が判らず困っています。
〜〜〜今の手順〜〜〜
① [ファイル]→[新規作成]→[プロジェクト]→MFC ActiveXコントロール でXXXプロジェクトを作成
② クラスビューを表示し、ツリービューのCXXXCtrlクラスを右クリックしてメソッドを追加
〜〜〜〜〜〜〜〜〜〜
MSDNライブラリの以下の説明に従っているつもりなのですが...。
右クリックのショートカットメニューの[追加]からは、
[メソッドの追加]ではなく[関数の追加]と表示されます。
また、[関数の追加]を選択した時に表示されるダイアログも
「メソッド追加ウィザード」ではなく「メンバ関数の追加ウィザード」ですし、
内容も微妙に違うようです(「内部名」というテキストボックスはない)。
ちなみに、VC++6.0でプロジェクトをMFC ActiveX Control Wizardで作成し、
ClassWizardでメソッドを追加した時には、odlファイルに宣言が追加され、
VBからも参照・呼び出しが可能になっていました。
初歩的な手順の問題とは思いますが、ご助言お願いします。
新規の質問なのに、
うま さんへの返信で書き込んでしまいました。
大変失礼致しました。
新規で書き込ませて頂きますので、管理人様、
この書き込みも含めて削除して頂けますでしょうか。
申し訳ありません。
>strmbasd.lib へのリンクはちゃんと通っているようなのですが
これはDirectX9.0cSDKの中で自力でビルドしたやつですよね?
strmbasd.libはデバッグビルド用なんだけど、
リリース用のstrmbase.libだとどうなる?
>ボコノン教徒さん
回答ありがとうございます。
strmbase.lib もリンクしてみましたが、同様にリンクでエラーが発生します。
エラーメッセージも同様です。
私のマシン以外でも同様のエラーを確認したので、DirectX9.0c+VS2003の問題のような気がしているのですが・・・
ISampleGrabberCBクラスを派生したフィルタは構築できたのですが、CTransformFilter / CBaseVideoRenderer クラスを利用しようとすると、コンストラクタがコールされるところでこの例外が発生します。
DirectShowについてくるサンプルのEZRGB24等はこの例外が発生しません。
.vcprojファイルもいじってみたりはしているのですが、どうにも原因がわかりません。
よろしくお願いします。
>DirectShowについてくるサンプルのEZRGB24等はこの例外が発生しません。
これは、自前でビルドしたのでしょうか。
以下、念のため。
SDK付属のサンプルをそのまま(サンプルのディレクトリツリーの中で)
ビルド・実行できますか?
事前にBaseClassesでビルドする必要があります。
> CTransformFilter / CBaseVideoRenderer クラスを利用しようとすると、
> コンストラクタがコールされるところでこの例外が発生します。
VS2003のパスにあるIncludeファイル内のCTransformFilter / CBaseVideoRendererの定義とstrmbase.lib を作成した際に使ったIncludeファイルのクラス定義が食い違っているようです。
別途、DirectX SDKを使う場合、VS2003のLibの中にあるstrmbase.libは使えない、と考えていいです。
回答ありがとうございます。
先ほどCドライブ全スキャンしたところ、strmbase.libが出るわ出るわ。
いくつかパス内のファイルは確認していたのですが、
違うものにリンクされていたようです。
ファイルを全部統一したところ、ようやくビルドが通りました。
どうもありがとうございました。
ツイート | ![]() |