我正在实现一个COM接口,该接口应返回int值S_OK
或E_FAIL
。我确定返回S_OK
,因为我从另一个调用(Marshal.QueryInterface)返回,但如果我想返回一个失败值,那么我应该使用什么实际值作为E_FAIL
?从c#.net代码返回S_OK或E_FAIL的值是什么?
(它是这样一个基本基本的问题很难找到答案)
假设它是Win32 API中定义的特定号码,有没有办法.NET代码中使用它没有说出我自己的常数?
谢谢!
更新(下面回答):
也许我是一个完整的plonker,但我有这个问题。根据我的Platform SDK,HRESULT是一个LONG,它是一个32位有符号整数,对不对?所以可能的值为-2,147,483,648至2,147,483,647。但是0x80004005 = 2,147,500,037这是> 2,147,483,647。是什么赋予了!?
这意味着当我试着把这在我的代码:
const int E_FAIL = 0x80004005;
我得到一个编译器错误无法隐式转换类型“UINT”到“廉政”。
更新2:
我要声明它是这样的:
const int E_FAIL = -2147467259;
,因为如果我尝试做这样的事情:
const UInt32 E_FAIL = 0x80004005;
return (Int32)E_FAIL;
我得到一个编译器错误常量值'2147500037'无法转换为'int'(使用'unchecked'语法覆盖)
唷!谁知道如何申报一个标准的返回值是多么棘手......在某个地方必须有一个潜伏的类,我应该使用像return Win32ReturnCodes.E _
FAIL; ... 叹息
终极解决方案:
我现在获取(大规模但非常有用)HRESULT枚举从pinvoke.net并将其添加到我的解决方案做到这一点。然后使用它是这样的:
return HRESULT.S_OK;
感谢所有帮助! – Rory 2008-12-12 15:25:37
链接已死,请参阅[常见HRESULT值](http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137(v = vs.85).aspx) – bland 2013-09-05 20:05:19