2012-01-28 5 views
1

DirectShow用のカスタムフィルタを登録しようとしましたが、ウィンドウが正しく登録されません。私は、「失敗したASSERT」を実行するとregsvr32.exeがhInstanceでASSERT_ERRORをスローする

ボックスが私に言って現れ:

g_hInst is NULL at Line 388 in file "dllsetup.cpp" 

ファイルは、通常のサンプルにMicroft SKDディレクトリにあります。.. \ dshow \ baseclassesフォルダ。 「はい」を押すと、regsvr32.exeが正常に戻ります。

regeditでレジストリエントリを確認し、InProcServer32のファイルパスというregsvr32.exeディレクトリに設定されています。 (欠落しているHINSTANCEを確認する)。 DllRegisterServerは有効なDLLインスタンスが必要ですが、取得できません...なぜですか?

フィルタは任意のフィルタグラフに追加することはできません。この間違ったregistyエントリのために、私はこだわっています(エラーメッセージ:DLLでエラーが発生しました - >それは「フィルタを見つける」ためにregsvr32.exeを呼び出す意味)

答えて

1

include/BaseClasses/dllsetup.cppから:

コメントはかなり明白です。おそらく、DllMain()関数でDllEntryPoint()を呼び出すことを忘れただけです。 regsvr32.exeがDLLをロードするとすぐに呼び出されます。疑いがある場合は、デバッガを使用してください。プロジェクト+プロパティ、デバッグ、コマンドをc:\ windows \ system32 \ regsvr32.exeに設定し、DllMain()関数でブレークポイントを設定します。 F5キーを押します。

+0

私はまだショーフィルタを指示する初心者ですが、私はexplicetely DllMain関数を実装する必要がありますか?私は、DirectShowが "DllMain、DllCanUnloadNow、DllGetClassObject"を単独で処理すると思っていました。私がしなければならないことは、それらを.defファイルで定義することでした。 – BeschBesch

+0

DShow-filters - > [link](http://msdn.microsoft.com/en-us/library/windows/desktop/dd391013%28v=)でMSDNのドキュメントを読んだ後、DllEntryPointを呼び出してプロジェクト設定をリセットして問題を解決しました。 vs.85%29.aspx)。 **同じ問題がありますか?:このサイトを見てください:[link](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318238%28v=vs.85%29.aspx )** – BeschBesch

+0

このリンクはhttp://msdn.microsoft.com/en-us/library/windows/desktop/dd375485(v=vs.85).aspxの情報と明示的に矛盾する点に興味があり、(a)基本クラスが1つを提供するので、DllMainを実装する必要はありません(異なる名前を使用してそれについて話しますが、これがどのように動作するか説明しません)。(b)dllエントリ関数(DllMain)この文書を一緒に入手する必要があります... – Jules

関連する問題