동일한 컴퓨터에서 개체를 생성 할 때 CocreateInstance ()와 CogetClassObject ()의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/824907

문제

CocreateInstance는 주어진 클래스 ID에 대한 COM 서버를 찾고 해당 ID의 객체 인스턴스를 생성하고 해당 개체 인스턴스에서 인터페이스를 검색한다는 것을 이해합니다. CogetClassObject ()는 클래스 ID의 COM 서버를 찾고 해당 클래스 ID에 대한 클래스 팩토리 인스턴스를 작성하고 해당 클래스 팩토리 인터페이스를 검색하여 실제 객체를 만드는 데 사용할 수 있습니다.

같은 컴퓨터에서 객체를 만드는 데 사용될 때 이러한 기능이 어떻게 다른가요? 그들은 같은 방식으로 작동하지만 정확히 동일한 COM 서버에서 다른 코드를 호출하게합니까?

도움이 되었습니까?

해결책

CogetClassObject는 본질적으로 특정 인터페이스의 공장에 대한 포인터를 반환합니다. 후드 아래에서 CocreateInstance는 CogetclassObject를 사용합니다. CogetClassObject를 호출하는 장점은 특정 객체의 많은 인스턴스를 만들려면 한 번만 클래스 공장을 만들 수 있다는 것입니다.

CogetClassObject의 MSDN 섹션은이 기능을 활용하는 방법에 대한 간략한 논의가 있습니다.

다른 팁

Jaredpar가 말한 것 외에도 한 가지 시나리오 -CogetClassobject는 클래스 공장을 반환합니다 (Inproc 서버의 경우 DLLGGETCASSOBJECT 내보내기 기능을 호출). 클래스 팩토리는 Coclass를 인스턴스화하는 데 사용됩니다. CocreateInstance는 내부적으로 CogetClassObject를 호출하고 필요한 클래스 공장을 가져온 다음 요청한 Coclass를 인스턴스화하는 데 사용합니다. CocreateInstance를 호출 할 때 Coclass의 생성을 연기 할 수 없습니다. Coclass의 창조가 비싸고 창조를 지연시키고 싶지만 여전히 클래스 공장에 접근 할 수 있으므로 요구에 따라 Coclass를 인스턴스화 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top