异常和错误代码
From Apache OpenOffice Wiki
< Zh | Documentation
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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). |