다른 인터페이스를 반환하는 COM 인터페이스에서 메서드를 호출하면 punkVal이 매번 달라집니다.COM 인터페이스가 동일한 호출 메소드에 대해 다른 값을 반환하는 이유는 무엇입니까?
그러나 이전 punkVal 's를 사용하여 해당 인터페이스 메소드를 호출해도 작동합니다. 불필요한 객체 (또는 객체에 대한 포인터)가 많이 생성되는 것 같지만 반환 된 인터페이스가 고유한지 여부를 결정하려면 다소 필요합니다. 내가 알기로는 인터페이스 (punkVal)를 리턴하고 모든 인스턴스마다 값이 다르다는 것입니다. 그 값이 가리키는 값은 항상 같지만 vtable 또는 무언가를 가리키고 있기 때문에 믿을만한 수표가 아닌 것 같습니다. 그것, 또는 이질적으로 보이는 인터페이스조차 실제로 모두 동일한 인터페이스입니다.
은 명확합니다 :someCOMInterface foo();
내가 foo는에 호출하고 punkVal가 나중에 쿼리가 호출 사용 방법의 호출해야한다 someCOMInterface 될 것으로 예상 호출합니다. 하지만 첫 번째 호출을 호출 할 때마다 다른 someCOMInterface (호출이 반환 한 값에서 "동일"하지만 "다름")을 얻습니다.