최근에 저는 다양한 Visual Studio Extensions 프로젝트를 작성하는 데 많은 시간을 보냈습니다. 프로젝트가 핵심 VS 서비스에 액세스하는 모든 관리 코드이지만 이전 스타일의 COM 인터페이스로 작업해야합니다.COM interop 참조 카운팅 가이드
var selectionTracker = (IVsMonitorSelection)serviceProvider.GetService(typeof(SVsShellMonitorSelection));
IntPtr ppHier;
uint pitemid;
IVsMultiItemSelect ppMIS;
IntPtr ppSC;
selectionTracker.GetCurrentSelection(out ppHier, out pitemid, out ppMIS, out ppSC)))
이 호출이 2 포인터 (ppHier 및 ppSC)와 객체 ppMIS를 반환 볼 수 있습니다 : 여기
은 예입니다. 질문 : COM 참조 카운팅으로 어떻게하면 좋을까요?COM 세계에서 메서드가 개체에 대한 포인터를 반환하면이 포인터는 반환되기 전에 AddRef로 처리됩니다. 즉, COM 객체 누출을 방지하기 위해 COM 개체 누출을 막을 때 해제해야합니다.
나는 또한 개체가 이미 RCW에 래핑 된 것으로 가정합니다.이 개체는 완성되었을 때 참조를 처리합니다.
위의 호출에 적용된이 2 가지 가정은 내 2 포인터에서 'Marshal.Release'를 호출해야한다는 것을 의미하지만, 반환 된 개체와 관련하여 참조 계산에 관해서는 안됩니다.
내 질문에 대한 답변 : COM 규칙에 따라 사용중인 COM 개체가 있다고 가정하면 COM 참조 계산을 올바르게 처리 할 수 있습니까?