2009-11-16 5 views
2

필자는 본질적으로 COM 서버 인 플러그인 세트를 만들고 있습니다. 각 플러그인에는 다른 구성 요소가 관리하는 구성 데이터 세트가 있으며 구성 데이터의 기본 키는 플러그인의 ProgID입니다. 플러그인이 구성 항목에 액세스해야 할 때 플러그인은 호출하고 해당 ProgID와 필요한 속성 이름을 전달합니다. 이것은 레거시 디자인이며 이전 버전과의 호환성을 유지해야합니다.여러 개의 ProgID가 동일한 ClsID를 가리킬 수 있습니까?

각 인스턴스마다 다른 구성 데이터 집합이있는 각 플러그인의 인스턴스를 여러 개로드해야합니다. 필자가 고려중인 솔루션은 각 플러그인에 대해 고유 한 여러 ProgID를 작성하는 것이며 각 ProgID는 플러그인에 대한 단일 ClsId를 가리 킵니다. 따라서 플러그인의 각 인스턴스는 ProgID에 의해 식별되고 ProgID는 구성 데이터의 기본 키로 사용되며 모든 것이 이전 버전과 100 % 호환됩니다.

그래서, 질문 :

  1. 이 수용 가능한 기술인가? (여러 개의 ProgID가 모두 단일 ClsID를 가리킴).
  2. 내 플러그인을로드 할 때 생성하는 데 사용 된 ProgID를 알 수 있습니까?

답변

4

PROG ID가 일반적으로 두 가지 방법으로 사용된다하십시오 PROG 아이디 (CLSIDFromProgID() 함수)에 대응하는 클래스 ID를 검출 -이) 이상 통화를 CoCreateInstance (사용된다 - 그리고 위해 PROG ID를 검출하도록 주어진 클래스 ID - 이것은 일반적으로 클래스 id의 인간 친화적 인 버전을 표시하는 데 사용됩니다.

이러한 매핑은 클래스 ID와 동일한 기본값을 가진 HKCR {ProgId} \ CLSID 키와 ProgId와 같은 기본값을 가진 HKCR \ CLSID {classid} \ ProgID 키가 있다는 것을 의미합니다. 즉, 매핑은 일대일입니다. 하나의 클래스 ID 아래에 하나 이상의 prog id를 가질 수 없습니다.

COM 구성 요소는 포함 된 CLSIDFromProgID()를 사용하여 가능한 모든 방법으로 얻은 클래스 ID를 전달하는 CoCreateInstance()를 호출하여로드됩니다. 구성 요소가 클래스 ID를 얻는 방법을 알려주는 방법은 없습니다.

+0

+1 큰 반응을 얻으려면 앞으로 며칠 이내에 아무 것도 추가하지 않는 한 결국 이것이 받아 들여진 대답이 될 수 있습니다. –

관련 문제