私はC#で書かれたアプリケーションを持っていますC#からCOMコンポーネントのProgIDを取得するにはどうすればよいですか?
コンポーネントの詳細、最初はProgIDについて、システム上のフォルダにCOMコンポーネントのリストを表示したいとします。
実行時に詳細を見つけるためにC#コードのコンポーネントを調べる方法はありますか?
私はC#で書かれたアプリケーションを持っていますC#からCOMコンポーネントのProgIDを取得するにはどうすればよいですか?
コンポーネントの詳細、最初はProgIDについて、システム上のフォルダにCOMコンポーネントのリストを表示したいとします。
実行時に詳細を見つけるためにC#コードのコンポーネントを調べる方法はありますか?
Hmm、 多分TypeLibConverterクラスを使用し、通常の .netフレームワークメタデータで作業する必要があります。
はあなたのDLL内のCOMコンポーネントの全く他のランタイムの詳細を持っていない場合、あなたはDLLに埋め込まれたレジストリリソースを読み込み、解析することができhere
を参照してください。これは、ProgIDとCLSIDを登録するために登録時に使用されるものです。
COMコンポーネント(コンポーネントが実装するインターフェイスなど)に関する実行時の詳細がわかっている場合は、レジストリを介してバックトラックする方法があります。 (ただし、以下のブルートフォース方法を使用せずにこれを行う方法はないとは思うが)。
もちろん、レジストリ内の特定のツリーを列挙し、サーバ/ハンドラエントリのDLL。
あなたがそのCOMオブジェクト内のいくつかのインタフェースへのアクセス権を持っている場合 - あなたはこのような何か行うことができます(ProgIDFromCLSIDを含む)は、レジストリを使用して、すべてのヒントについてconmponetが実際に登録する必要があることを
[DllImport("ole32.dll")]
static extern int ProgIDFromCLSID([In] ref Guid clsid,
[MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);
//...
Type t = someInterface.GetType();
Guid tmpGuid = t.GUID;
string sProgID;
ProgIDFromCLSID(ref tmpGuid, out sProgID);
注意を。 達成しようとしていることは何ですか?タイプリーフを読むためのアレックスの提案はおそらく最も一般的であるが、最も複雑である。 – peterchen