我正在使用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"
有点荒谬......
答案 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了解详情。