2013-10-04 4 views
1

관련이 this 질문 :Com + Class ID는 어떻게 결정됩니까?

사용자 지정 코드를 넣어야하는 C# 템플릿/프로젝트가 있습니다. 문서에 따르면 "4 개의 공용 함수 이외의 다른 코드가 변경되면 COM + 클래스 ID가 변경 될 수 있으며 개체 안전 스크립트가 작동하지 않아 BSTCustomValidation.dll 유효성 검사 구성 요소가 실행되지 않습니다."

템플릿이 잘 작동하여 COM + 클래스 ID가 변경되지 않았다고 가정합니다. 일련의 개인 메서드를 추가 할 때 COM + 클래스 ID가 변경된 것처럼 보였고 유효성 검사에 실패했습니다. 하지만 인터페이스를 만들고 클래스가 상속 받으면 Com 클래스 ID가 원본 템플릿과 동일하기 때문에 유효성 검사를 통과했습니다.

개인용 메서드를 추가하면 Com + Class ID가 변경된 것이지만 인터페이스를 추가하면 다시 변경됩니다.

답변

1

C 번호 (또는 다른 CLR 언어) 두 가지 방법 중 하나로 COM-볼 개체에 대한 CLSID가 생성 : CLR을 런타임에 대해 하나를 생성 당신은 명시 적으로 Guid 속성을 사용하여 CLSID를 지정

  1. , 또는
  2. 당신은 클래스의 type을 기반으로합니다. 정확한 알고리즘을 모르지만, 무작위가 아니거나 CLSID가 빌드에서 빌드로 변경된다는 점을 제외하고는 알 수 없습니다.

그래서 개인 메서드를 추가하면 클래스의 형식 데이터가 변경되어 GUID가 변경되었습니다. 인터페이스가되는 것은 분명히 GUID 생성 알고리즘에 영향을 미치지 않습니다.

인터페이스없이 개인 메소드를 추가하려면 (예 : 리플렉션을 통해) 현재 GUID를 가져오고 GUID 속성을 사용하여 명시 적으로 GUID를 지정하십시오.

+0

그 주석이 나올 때까지는 (실제로 놀랍지 만) 그 물체가 같은 이름과 동일한 공개 메소드를 가지고 있기 때문에 실제로는 다른 유형이라는 것을 깨달았습니다. 명성 – TruthOf42

관련 문제