C++Builder2007 で DirectShow フィルタが書けないってほんまかいな

id:logion:20070907#p1 の日記でも書いた通り、先日の仕事の開発環境を VisualStudio2005 主体にしたのは、DirectShow のフィルタを C++Builder で書くことができない、と思っていたためでした。
過去何度か挑戦したもの、DirectShow 基底クラス(BaseClasses)のビルドがうまくいかなかったり、WindowsServer2003 PlatformSDK を BDS2006 で使おうとしてコンパイルエラーの嵐に涙したり…と挫折を繰り返しており、いつか時間ができたら一度、徹底的に調査してみようと思っていまいた。思いつつ…はや 2 年ほどが経過していましたが! orz

上記の仕事に取り掛かった 5 月の時点ではまだリリースされていませんでしたが、今手元にある C++Builder2007 は最新の Windows SDK に対応しているというので、ここしばらくガリガリとビルドに挑戦していました。

結論から書きますと、WindowsSDK に含まれている DirectShow 基底クラスのソースに一部パッチをあてることで、C++Builder2007 でトランスフォームフィルタ・プッシュ型のソースフィルタをビルドし、GraphEdit 上で動くことを確認する所までできました。
未解決の問題*1もありますが、取り急ぎ VisualStudio2005 + WindowsSDK for Vista と C++Builder2007 Update3 の両方でビルド可能なソース一式を置いておきます。(9/28変更: 基底クラスのソースを含まずパッチを収録したものに差し替えました)
このアーカイブには上記 Windows SDK から抜き出した DirectShow 基底クラスのソースを改変したものと、DirectX 9.0 SDK Update (February 2005) Extras に含まれていたサンプルソース(ball と contrast) をもとにかなり手を加えたソースが含まれています。(そのまま配布はマズいような気がするので、パッチが作成できたら置き換えたいと思います。*2 )

ということで、この日記をたまたま見かけた方々に「C++Builder ではフィルタは書けない」という FUD をばらまいている事になってたんでは(ガクガクブルブル)というここ数年の懸念がようやく解決に向かい出したように思います。
次の趣味プログラムも DirectShow が必要なので C++Builder に戻るというルートができたのは素直に嬉しく思います。C# + WindowsForms もそこそこ楽しかったですが、やはり UI の激しい再描画とかもっさり加減に萎え気味で、本来はそこで XAMLWPF に移行すべきなんでしょうけれども相当モチベーションを高める必要がありそうでまだ手を出せていません…。
まあ選択肢が広がるのは良いことだと思います。

*1:プロパティページを表示できない問題が残っています。追って調査中。

*2:Windows 用のパッチ作成ツールにどんなものがあるか調べとかな…。