2

私は、基本的にプラグインである一連の COM サーバーに取り組んでいます。各プラグインには、別のコンポーネントによって管理される構成データのセットがあり、構成データの主キーはプラグインの ProgID です。プラグインが構成アイテムにアクセスする必要がある場合、呼び出しを行い、その ProgID と必要なプロパティの名前を渡します。これは従来の設計であり、下位互換性を維持する必要があります。

各プラグインの複数のインスタンスをロードする必要があり、各インスタンスには異なる構成データのセットがあります。私が検討している解決策は、プラグインごとに複数の一意の ProgID を作成することです。各 ProgID は、プラグインの単一の ClsId を指します。したがって、プラグインの各インスタンスはその ProgID によって識別され、ProgID は引き続き構成データの主キーとして使用され、すべてに 100% の下位互換性があります。

だから、質問:

  1. これは受け入れられる技術ですか?(複数の ProgID がすべて単一の ClsID を指しています)。
  2. プラグインが読み込まれると、作成に使用された ProgID を認識できますか?
4

1 に答える 1

5

プログラムIDは通常、2つの方法で使用されます。プログラムIDに対応するクラスIDを検出する(CLSIDFromProgID()関数)-これは後でCoCreateInstance()を呼び出すために使用されます-特定のクラスIDのプログラムIDを検出します-これは通常、クラスIDの人間にわかりやすいバージョンを表示するために使用されます。

これらのマッピングは、デフォルト値がクラスIDに等しいHKCR {ProgId} \ CLSIDキーと、デフォルト値がProgIdに等しいHKCR \ CLSID {classid} \ ProgIDキーがあることを意味します。つまり、マッピングは1つです。 to-one。1つのクラスIDの下に複数のプログラムIDを含めることはできません。

COMコンポーネントは、クラスIDが渡されるCoCreateInstance()を呼び出すことによってロードされます。これは、含まれているCLSIDFromProgID()を使用して、可能な任意の方法で取得されます。コンポーネントがクラスIDがどのように取得されたかを知る方法はありません。

于 2009-11-16T07:25:47.630 に答える