가자을 해제해야 IShellBrowser*획득을 통해 문서화되지 않 WM_GETISHELLBROWSER(WM_USER+7)메시지가?

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

  •  19-09-2019
  •  | 
  •  

문제

여러 가지고 지적했다고 있지 않다는 메시지를 검색합니다 IShellBrowser 인터페이스 포인터 에서 일반적인 대화 HWND 에 대한 파일을 열고 및 저장 대화 상자를 재생할 수 있습니다.

그러나 거기에는 충돌 정보(또는 정보가 없)는지 여부에는 포인터가 AddRef 것,또는 경우에 그것은 단지 원시 주소를 반환하고 아무 Release()호출해야 하나요?

도움이 되었습니까?

해결책

No.당신이 찾을 수 있습니다 다음과 같은 링크에 유용합니다: 규정 요소의 객체 모델 .

발췌:

참조-세 규정

규칙 1:AddRef 해야 합 불 모든 새로운 복사본의 인터페이스 포인터를 놓라마 파괴의 인터페이스 포인터 경우를 제외하고 이후 규정 명시적으로 허용하지 않습니다.

다음 규칙이 일반적인 통화 nonexceptions 칙 1.

  • 규칙 1a:In-out-매개 변수하는 기능입니다.합니다 AddRef 실제 매개변수 있을 것이기 때문 발표에 의해 수신자의 경우 밖으로 값이 저장됩니다.
  • 규칙 1b:가져오는 글로벌 변수입니다.로컬 사본의 인터페이스 포인터를 가져온에서 기존의 사본에서 포인터 변수이어야 합 독립적으로 참조 계산기 때문에,이라는 기능을 수도 있습을 파괴하는 복사에서는 글로벌 동안 복사본은 여전히 살아있습니다.
  • 규칙 1c:새로운 포인터 합성된 밖의"공입니다." 는 기능을 합성하는 인터페이스 포인터를 사용하여 특수한 내부식,오히려 그것을 얻기 다른 소스에서,해야 할 초기 AddRef 에 새롭게 합성된 포인터이다.중요한 것 같은 루틴을 포함한 인스턴스를 만드는 루틴의 구현 IUnknown::응용 프로그램을 실니다.
  • 규칙 1d:로 돌아의 사본을 내부적으로 저장되는 포인터이다.후에는 포인터를 반환되었습,수신자가 아이디어가 어떻게 그것의 일생에 관한의 내부에 저장된 사본의 포인터이다.따라서,수신자를 호출해야 합 AddRef 포인터에서 복사본을 반환하기 전에습니다.

원칙 2:특별한 지식이 부분 조각의 코드의 관계의 시작과 의 엔딩은 일생의 두나 더 복사본의 인터페이스 포인터 허용할 수 있습 AddRef/Release 쌍할 생략됩니다.

  • 에서 COM 클라이언트의 관점에서,참조-세는 항상 당 인터페이스의 개념입니다.클라이언트가 있다고 가정하지 마십시오 개체용 계산이 모든 인터페이스가 있습니다.
  • 반환 값의 AddRef 및 릴리스에 의지하여,그리고 사용해야만 디버깅용으로 사용됩니다.
  • 포인터를 안정성;에서 세부 사항을 참조하십시오 OLE 도움말 파일에서"참조-세 규칙","하위 섹션 안정화 이 포인터는 그것을 유지 유효합니다."

보 우수한 관리"체 수명 OLE"의 기술 문서 더글러스 스,그리고 3 장의 내부 OLE,2nd edition 에 의해 Kraig Brockschmidt MSDN(라이브러리,책)한 더 많은 정보에 참조-습니다.

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