공식적으로 함수가 성공하지 않는 한 COM 함수의 [out]
매개 변수를 사용하면 안됩니다. 이는 [out]
매개 변수를 사용할 수 있는지를 확인하는 세 가지 방법이 있음을 의미합니다.COM에서 [out] 매개 변수를 사용할 수 있는지 어떻게 확인해야합니까?
는
interface IFoo : IUnknown {
HRESULT GetOtherFoo([out] IFoo** ppFoo);
HRESULT Bar();
};
당신이 그것을 사용하여 다음과 같은 방법으로 추천 할 것입니다 다음과 같은 인터페이스를 고려?
1. 반환 값
CComPtr<IFoo> other;
HRESULT hr = foo->GetOtherFoo(&other);
if (SUCCEEDED(hr))
other->Bar();
이 나를 만드는 비트 IFoo
의 버그가 NULL
포인터 역 참조가 발생할 수 있기 때문에 신경.
2. 출력 매개 변수이 방법이 실패 할 경우 매개 변수가 변경되었을 경우는 [out]
매개 변수를 (변경해서는 안된다는 사실에 따라
< ==> 그것을 사용하는 것이 안전합니다). 이 종류의 포인터가 그렇게 쓰레기가 될 수 없습니다 NULL
없는 경우 CComPtr
의 소멸자 Release
를 호출합니다, 어쨌든 일어나는 것을
CComPtr<IFoo> other;
foo->GetOtherFoo(&other);
if (other)
other->Bar();
참고.
3. 편집증 방법이 내 의견에 조금 자세한 모두
CComPtr<IFoo> other;
HRESULT hr = foo->GetOtherFoo(&other);
if (SUCCEEDED(hr) && other)
other->Bar();
을 확인합니다.
P. related question을 참조하십시오.