2009-06-09 13 views
2

私はC#で書かれたアプリケーションを持っていますC#からCOMコンポーネントのProgIDを取得するにはどうすればよいですか?

コンポーネントの詳細、最初はProgIDについて、システム上のフォルダにCOMコンポーネントのリストを表示したいとします。

実行時に詳細を見つけるためにC#コードのコンポーネントを調べる方法はありますか?

+0

注意を。 達成しようとしていることは何ですか?タイプリーフを読むためのアレックスの提案はおそらく最も一般的であるが、最も複雑である。 – peterchen

答えて

0

Hmm、 多分TypeLibConverterクラスを使用し、通常の .netフレームワークメタデータで作業する必要があります。

はあなたのDLL内のCOMコンポーネントの全く他のランタイムの詳細を持っていない場合、あなたはDLLに埋め込まれたレジストリリソースを読み込み、解析することができhere

1

を参照してください。これは、ProgIDとCLSIDを登録するために登録時に使用されるものです。

COMコンポーネント(コンポーネントが実装するインターフェイスなど)に関する実行時の詳細がわかっている場合は、レジストリを介してバックトラックする方法があります。 (ただし、以下のブルートフォース方法を使用せずにこれを行う方法はないとは思うが)。

もちろん、レジストリ内の特定のツリーを列挙し、サーバ/ハンドラエントリのDLL。

1

あなたがその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); 
関連する問題