サンプルフィルタPushSourceのコンパイル
プッシュソースフィルタのサンプルをコンパイルしてみる。 うまくいけばこれを改良してビットマップを連続読み込みさせられるかも。 開発環境:WindowsXP SP2, Visual Studio C++ 2008 Express Edition, Windows SDK v6.0a


行ったこと:

1. 好きな場所にディレクトリを作る。

2. C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Samples\Multimedia\DirectShow\Filters\PushSource以下のファイルをコピー

3. VS2008EEで空のプロジェクトを作る(新規作成→プロジェクト→全般→空のプロジェクト)

4. 4.でコピーしたファイルを全て追加

5. 出力ファイルをDLLに(プロジェクト→プロパティー→構成のプロパティー→構成の種類)

6. ヘッダのインクルードディレクトリにBaseClassesのディレクトリを追加(プロジェクト→プロパティー→構成のプロパティー→C/C++→追加のインクルードディレクトリ)

7. BaseClassesで作成したlibをコピーしsetup.cppに以下を追加


#pragma comment(lib, "based.lib")	//BaseClassesで作成したlib
#pragma comment(lib, "strmiids.lib")
#pragma comment(lib, "winmm.lib")

8. BaseClassesのディレクトリからactivex.verとactivex.rcvを追加。

9. PushSource.rcの中のactivex.verとactivex.rcvのinclude指定をダブルクォーテーションに変更。 10. DEFファイルの追加(プロジェクト→プロパティー→構成のプロパティー→リンカ→入力→モジュール定義ファイル→PushSource.def)



これでたぶんOK。後は例のごとく

11. おもむろにビルド

これでPushソースフィルタが出来たはず。
続いて、実際に使用してみる。サンプルのGUIDはPushGuids.hに記述してある。独自のフィルタを作る場合は、ここを書き換える。 まず、レジストリに登録しようregsvr32.exeを用いて

コマンドプロンプト > regsvr32.exe PushSource.dll

で登録される。解除はオプションに/uをつける。

あれ、うまくいかない、、、続きは次回だな、、、 DLLの関数名がうまくexportされないようだ。VS2008をまだ使いこなせていないからかな?

その日のうちに解決!!代償に日付は回りそうだが。 結局、上記の10番の処理(DEFの指定)を忘れてただけだった。 VC6の頃はDEFをプロジェクトに加えるだけでよかった気がするが、VS2008ではプロパティーで明示的に指定する必要があるようだ。

とにかく完成
テストとして GraphEdit.exeで遊んでみよう。Graph→Insert Filtersから今作ったPushSourceをインサートしてみる。DirectShow Filtersの中にPushSource Bitmap Filter, PushSource BitmapSet Filter, PushSource Desktop Filterがあるはず。
まず最初に適当な画像をGraphEditにドラッグしてから、作ったフィルターを追加して、ソースフィルターと入れ替えればOK。

やった。やった。 さて、次回は目的のフィルタが作れるかな。



Atsushi M. Ito web