« IWMSyncReaderでの出力フォーマットの指定 | メイン | とりあえずエンコードが出来るように »

2005年10月12日

動画エンコーダー開発:: 1つのEXEへ

    

DLLのエントリーポイントやフィルタとして登録するための関数やテーブルを削除し、一つのプロジェクトの中にすべてのファイルを入れる。
フィルターのGUIDがかち合わないように、念のため別のGUIDに変更し、ビルド。
プリコンパイル済みヘッダーに頼っているものと、そうでないものが混ざっていてインクルードぐちゃぐちゃでコンパイルエラー出まくり。
問題が発生していた部分を調整しビルド。

今度はリンクエラー。
フィルタを作る時に必要なクラスファクトリを持ったグローバル変数がないと言われているが、そもそもフィルタを登録しないのでそんなものは消してしまった。
また、必要もないはずなのだが……
そのため、初めはなぜそのエラーが出るのか良くからなかった。
が、エラーメッセージを見ると、strmbasd.lib(dllentry.obj)で参照されていると出ている。
dllentry.objだけ、リンクしないように出来ないかと思ったが、良くわからず。
少し悩んで、ピンときた。
strmbasd.libは、フィルタを作る時の基底クラスやユーティリティークラスを集めたライブラリで、これは自分でビルドする。
つまり、dllentry.objを含まないライブラリを作ればいいんだ。
で、dllentry.objだけでなく、も一つ必要なさそうなdllsetup.objも含まないライブラリを作った。

作ったライブラリをリンクするように変更してビルドするが、今度はg_hInstやg_amPlatformがないと言われる。
どうやら、さっき省いた物の中に入っていたらしい。
そこで、WinMainが入っているソースと同じ場所に定義した。
ただ、これだけだとまずそうなので、dllentry.cppのソースを見て、同じようにg_hInstなどの値を設定するようにした。
これで、一応ビルドが通るようになった。



投稿者 Takenori : 2005年10月12日 06:55




comments powered by Disqus
Total : Today : Yesterday : なかのひと