3

先日、オーバーレイアイコンについて質問させていただきました。助けを借りて、それを機能させる方法を見つけました。

シェルがアイコンを描画する前に、システム内のすべてのアイコン オーバーレイ ハンドラーに連絡して、その特定のアイコンにオーバーレイを描画する必要があるかどうかを判断します。

私のセットアップ:
アイコン オーバーレイを表示するために使用する登録済みのシェル拡張機能 (アイコン オーバーレイ ハンドラー) があります。また、オーバーレイを表示するすべてのファイルとフォルダーの名前などをデータベース (おそらく SQLite) に書き込む .NET アプリケーション (C#) があります。

私の問題は次
のとおり です。.NET アプリケーションにコールバックするシェル拡張 (基本的には COM DLL だと思います) を取得するにはどうすればよいですか? それとも、それはやり過ぎで、シェル拡張をデータベースから直接読み取る必要がありますか?

可能な解決策?

  1. シェル拡張 (アイコン オーバーレイ ハンドラー) にデータベースを読み取らせ、オーバーレイを表示するかどうかを決定します。
  2. オーバーレイを表示するかどうかを決定するために、シェル拡張機能を .NET アプリケーションにコールバックさせます。

これが理にかなっていることを願っています。そうでない場合は、詳しく説明します。

4

2 に答える 2

2

はい、アセンブリをCOM表示としてマークし、regasmを実行すると、COM dllは生成されたタイプライブラリをインポートし、CoCreateInstanceを呼び出して.NETクラスへの参照を取得できます。

ただし、.NETFrameworkをシェル拡張機能に取り込むのは少し怖いです。したがって、.NETコードがアウトプロセスで呼び出されていることを確認する必要がある場合があります...つまり、CLSCTX_LOCAL_SERVERからCoCreateInstanceへ。

于 2009-05-12T20:13:28.787 に答える
2

COM DLL は、.NET アセンブリと直接通信できません。.NET アセンブリを COM オブジェクトとして公開し、代わりにこの COM オブジェクトと対話する必要がある場合があります。しかし、実際には、これはあなたのシナリオではやり過ぎかもしれません。もう 1 つのオプションは、.NET アセンブリ内のデータベースと対話する機能を、シェル拡張から呼び出される相互運用可能なサービス (WCF?) として公開することです。

于 2009-05-12T19:19:24.613 に答える