Difference between revisions of "Zh/Documentation/DevGuide/ProUNO/Bridge/Exceptions and Errorcodes"
From Apache OpenOffice Wiki
< Zh | Documentation
m |
|||
Line 7: | Line 7: | ||
|NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Automation Objects with UNO Interfaces | |NextPage=Zh/Documentation/DevGuide/ProUNO/Bridge/Automation Objects with UNO Interfaces | ||
}} | }} | ||
− | + | {{Documentation/DevGuideLanguages|Documentation/DevGuide/ProUNO/Bridge/{{SUBPAGENAME}}}} | |
{{DISPLAYTITLE:异常和错误代码}} | {{DISPLAYTITLE:异常和错误代码}} | ||
Latest revision as of 03:09, 14 May 2009
UNO 接口函数通过抛出异常来指出错误。Automation 对象提供一种不同的错误机制。首先, IDispatch
接口描述在某些情况下返回的许多错误代码 (HRESULT
)。其次,Invoke
函数接受一个参数,对象可以使用此参数提供描述性错误信息。参数是一种类型为 EXCEPINFO
的结构,桥用它来传达调用 UNO 接口函数后抛出的异常。如果 UNO 方法抛出异常,桥会使用以下值填充 EXCEPINFO
::
EXCEPINFO::wCode = 1001 EXCEPINFO::bstrSource = "[automation bridge]" EXCEPINFO::bstrDescription = type name of the exceptions + the message of the exception (com::sun::star::uno::Exception::message )
并且返回的错误代码将为 DISP_E_EXCEPTION
.
由于 automation 桥处理 Invoke 调用并且最终调用相应的 UNO 方法,因此,可以存在其他不是由 UNO 方法本身引起的错误。下表说明了这些错误及其原因。
HRESULT | 原因 |
---|---|
DISP_E_EXCEPTION
|
|
DISP_E_NONAMEDARGS
|
|
DISP_E_BADVARTYPE
|
|
DISP_E_BADPARAMCOUNT
|
|
DISP_E_MEMBERNOTFOUND
|
|
DISP_E_TYPEMISMATCH
|
被调用的程序提供的参数类型不正确。 |
DISP_E_OVERFLOW
|
无法将一个参数强制转换成所需的类型。内部调用 XInvocation::invoke 导致抛出 CannotConvertException 。字段 reason 具有值 OUT_OF_RANGE ,这表明给定值与目标类型的范围不匹配。
|
E_UNEXPECTED
|
[2] 执行 XInvocation::invoke 时 com.sun.star.script.CannotConvertException 的结果: FailReason::UNKNOWN 。内部调用 XInvocation::invoke 导致抛出 com.sun.star.script.CannotConvertException。字段 reason 具有值 UNKNOWN ,这表示某种未知错误状态。
|
E_POINTER
|
调用了 Bridge_GetValueObject 或 Bridge_GetStruct ,但没有提供返回值的参数。
|
S_OK
|
正确。 |
IDispatch::GetIDsOfNames:
的返回值:
HRESULT | 原因 |
---|---|
E_POINTER
|
调用程序没有提供接收 DISPID 的参数。
|
DISP_E_UNKNOWNNAME
|
不存在给定名称的函数或属性。 |
S_OK
|
正确。 |
函数 IDispatch::GetTypeInfo
和 GetTypeInfoCount
返回 E_NOTIMPL
。
从 UNO 调用 Automation 对象 时,以下 HRESULT
值将被转换成异常。请注意,已经确定 XInvocation::invoke()
的函数允许抛出的异常。
XInvocation::invoke()
抛出的异常及其对应的 HRESULT
:
HRESULT | Exception |
---|---|
DISP_E_BADPARAMCOUNT
|
com.sun.star.lang.IllegalArgumentException |
DISP_E_BADVARTYPE
|
com.sun.star.uno.RuntimeException |
DISP_E_EXCEPTION
|
com.sun.star.reflection.InvocationTargetException |
DISP_E_MEMBERNOTFOUND
|
com.sun.star.lang.IllegalArgumentException |
DISP_E_NONAMEDARGS
|
com.sun.star.lang.IllegalArgumentException |
DISP_E_OVERFLOW
|
com.sun.star.script.CannotConvertException, reason= FailReason::OUT_OF_RANGE
|
DISP_E_PARAMNOTFOUND
|
com.sun.star.lang.IllegalArgumentException |
DISP_E_TYPEMISMATCH
|
com.sun.star.script.CannotConvertException, reason= FailReason::UNKNOWN
|
DISP_E_UNKNOWNINTERFACE
|
com.sun.star.uno.RuntimeException |
DISP_E_UNKNOWNLCID
|
com.sun.star.uno.RuntimeException |
DISP_E_PARAMNOTOPTIONAL
|
com.sun.star.script.CannotConvertException, reason= FailReason::NO_DEFAULT_AVAILABLE
|
XInvocation::invoke()
抛出的异常与 invoke()
相同:
HRESULT | Exception |
---|---|
DISP_E_BADPARAMCOUNT
|
com.sun.star.uno.RuntimeException |
DISP_E_MEMBERNOTFOUND
|
com.sun.star.beans.UnknownPropertyException |
DISP_E_NONAMEDARGS
|
com.sun.star.uno.RuntimeException |
除了以下异常,XInvocation::getValue()
抛出的异常与 invoke()
相同:
HRESULT | Exception |
---|---|
DISP_E_BADPARAMCOUNT
|
com.sun.star.uno.RuntimeException |
DISP_E_EXCEPTION
|
com.sun.star.uno.RuntimeException |
DISP_E_MEMBERNOTFOUND
|
com.sun.star.beans.UnknownPropertyException |
DISP_E_NONAMEDARGS
|
com.sun.star.uno.RuntimeException |
DISP_E_OVERFLOW
|
com.sun.star.uno.RuntimeException |
DISP_E_PARAMNOTFOUND
|
com.sun.star.uno.RuntimeException |
DISP_E_TYPEMISMATCH
|
com.sun.star.uno.RuntimeException |
DISP_E_PARAMNOTOPTIONAL
|
com.sun.star.uno.RuntimeException |
Content on this page is licensed under the Public Documentation License (PDL). |