【发布时间】:2014-06-18 13:47:18
【问题描述】:
我一直在阅读 MSDN 的 COM 开发指南。但是this page 上的代码令人困惑。在此复制:
以下代码示例显示了处理未知错误的推荐方法:
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 也没有帮助。网络搜索表明GetScode 是一个将 HRESULT 转换为 SCODE 的宏,但是它们都是 32 位整数,所以我不确定它的用途。
有人建议它是一个历史工件,在 32 位系统上什么都不做,但在 16 位系统上它会将 hr 转换为 16 位 int。但是,如果这是真的,那么我看不出E_UNEXPECTED 将如何匹配,因为那是0x8000FFFF。此外,尚不清楚 x1 和 x2 是指 0x800..... 值,还是某种截断版本。
最后,此代码将所有成功值都视为错误。同一 MSDN 指南上的其他页面说应该使用 SUCCEEDED(hr) 或 FAILED(hr) 来确定成功或失败。
那么,这个代码示例真的是“推荐的方式”还是某种文档错误?
【问题讨论】:
-
那一定是一个相当古老的文件。
GetScode是一个 long 已过时的宏。它曾经是推荐的方式,但现在不再是。
标签: error-handling com msdn