HRESULT如何出现在MIDL文件中?

时间:2010-08-10 15:48:49

标签: c# c++ com interop

我正在使用IDL文件开发一些COM接口。一些接口方法返回HRESULT,但我检查了MIDL language reference on MSDN,没有HRESULT的线索。那我在哪里可以找到这种数据类型的官方定义?

更新

感谢Shog9,我在 wtypes.idl 中找到了它。我将其粘贴到其他人的视图中:

    ...
    cpp_quote("#ifndef _HRESULT_DEFINED")
    cpp_quote("#define _HRESULT_DEFINED")
    #if defined(_STRICT_HRESULT)
    typedef struct _HRESULT_STRUCT {
            DWORD Data1;
    } HRESULT_STRUCT, *PHRESULT_STRUCT;
    typedef PHRESULT_STRUCT HRESULT;
    #else // defined(_STRICT_HRESULT)
    cpp_quote("#ifdef __midl")
    typedef LONG HRESULT;
    ...

但是,当我在我的IDL文件中显式使用DWORD或LONG时,MIDL编译器将报告错误说:

"error MIDL2269: procedures in an object interface must return an HRESULT" 

有点荒谬......

2 个答案:

答案 0 :(得分:3)

任何实用的.idl文件都应以

开头
import "oaidl.idl";
import "ocidl.idl";

其中声明必不可少的类型。像HRESULT和VARIANT。等等。

答案 1 :(得分:3)

它实际上只是DWORD的别名(这是unsigned long的别名)。在wtypes.idl中为MIDL #defined,as Hans notes由标准导入机制引入。

HRESULT的目的是以一致可识别的方式表示返回码 - 无论值中编码的源或其他信息如何,都可以识别成功和失败,并且某些系统定义的值具有特殊含义与标准接口配合使用时。 See MSDN了解详情。