COM에 대한 MSDN 개발자 안내서를 읽었습니다. 그러나 this page의 코드는 혼란 스럽습니다.MSDN에서 혼동 COM에서 "오류를 처리하는 데 권장되는 방법"
다음 코드 샘플은 처리 알 수없는 오류의 권장되는 방법을 보여줍니다 : 여기에 재현
HRESULT hr;
hr = xxMethod();
switch (GetScode(hr))
{
case NOERROR:
// Method returned success.
break;
case x1:
// Handle error x1 here.
break;
case x2:
// Handle error x2 here.
break;
case E_UNEXPECTED:
default:
// Handle unexpected errors here.
break;
}
가 GetScode
함수를 정의하지 않는 것을,도 NOERROR
하고, 검색 MSDN didn 히 도와주세요. 웹 검색은 GetScode
이 HRESULT를 SCODE로 변환하는 매크로이지만 32 비트 int이므로 32 비트 int가 무엇인지 모르겠습니다.
32 비트 시스템에서는 아무 것도 수행하지 않는 역사적인 인공물이지만, 16 비트 시스템에서는 hr
을 16 비트 int로 변환합니다. 그러나 그것이 사실이라면 0x8000FFFF
이기 때문에 E_UNEXPECTED
이 어떻게 일치하는지 알지 못합니다. 또한 x1
과 x2
이 0x800.....
값인지 또는 일부 잘린 버전인지 여부가 명확하지 않습니다.
마지막으로이 코드는 성공 값의 모두를 오류로 처리합니다. 동일한 MSDN 가이드의 다른 페이지에서는 SUCCEEDED(hr)
또는 FAILED(hr)
을 사용하여 성공 또는 실패 여부를 결정해야합니다.
그래서이 코드 샘플 은 실제로 "권장 방법"입니까, 아니면 이런 종류의 문서가 실수입니까?
꽤 오래된 문서 여야합니다. 'GetScode'는 * long *을 사용하지 않는 매크로입니다. 이전에는 권장 된 방법 이었지만 더 이상은 아닙니다. –