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). | 

