7

私は directShow フィルターを持っています: MyFilter.ax

MyFilter.ax を Regsvr32 ユーティリティに登録しようとすると、エラーやメッセージ(成功または失敗) は表示されません。ただし、フィルターは登録されていません。

Regsvr32 ユーティリティは、私の他のフィルターでは問題なく動作します。

Regsvr32 Deo が成功または失敗のメッセージを表示しないのはなぜですか? Regsvr32 の失敗と成功をデバッグするにはどうすればよいですか? 意味のあるメッセージを表示する可能性のある directshow フィルターを登録するための代替ユーティリティはありますか?

幸運をお祈りしています

アップデート:

仮想マシンにクリーンな win7 OS をインストールします。次に、登録を試みます。regsvr32 からのメッセージ応答がなく、再び失敗します。

ただし、仮想マシンにクリーンなwin7 OSを再度インストールします。次に、すべての更新を行います。そして、更新を行った後、regsvr32が機能し、フィルターをインストールしました....regsvr32が失敗する原因と、それを修正する更新の種類がわかりません。それとも本当に更新の問題ですか...

4

4 に答える 4

3

発生して前述の動作を示す可能性があるのは、フィルターのどこかでデッドループ、つまり無限の待機状態にあるため、DLLのDllRegisterServerが戻ることはないということです。この場合、zippy32タスクマネージャーを試すたびに、CPU消費の有無にかかわらず、もう1つのzippy32.exe実行プロセスが表示されることがわかります。

これがあなたが持っているものであるならば、あなたはデバッガーで接続して、あなたがそこにデッドループを持っている正確にどこにあるかを見たいでしょう...

于 2011-09-07T18:06:10.490 に答える
2

/sオプションで regsvr32 を呼び出さないことを確認してください

于 2011-08-11T07:11:25.450 に答える
1

regsvr32 のようなアプリケーションを自分で実装できます。ターゲットの dll をロードして、関数DllRegisterServerを呼び出すだけです。たとえば、次の p/invoke 宣言を使用して C# で実装できます。

[DllImport("yourdll.ax")]
private static extern int DllRegisterServer();

この方法で問題を絞り込むことができるかもしれません。

アップデート:

Windows 7 Platform SDK をインストールして、それに対して DirectShow フィルターをコンパイルしてみます。Windows 7 の古いバージョンの DirectX との互換性の問題を以前に見たことがあります (dll が見つからないことさえあります)。

于 2011-08-11T17:28:41.460 に答える
1

私もこの問題を抱えていましたが、何が間違っていたのかを理解するために私がしたことは次のとおりです。

dll をスタートアップ プロジェクトとして設定します。
構成プロパティに移動します -> デバッグ: コマンドをc:\windows\syswow64\regsvr32.exe(32 ビット システムの場合は 32 ビット バージョンc:\windows\system32\regsvr32.exe)
に設定します コマンド引数を dll のフル パスに設定します
デバッグ モードで実行すると、ポップアップが表示されます。 dll が正しく登録されている場合、実行はハングします。
クリックして実行を一時停止します。 [
スレッド] デバッグ ウィンドウで確認し、現在アクティブなスレッドを確認します。ほとんどのスレッド(私の場合)がntdll.dllでハングしているため、コールスタックを確認してください

于 2012-12-07T19:15:20.750 に答える