|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
1 k- r, P3 }7 \3 h, P
{- E& j1 a) Y1 ]5 v错误处理
t p; u" N/ m' h# x! Z$ W1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
6 F# `! }0 R* L& G9 H(1)无效的参数输入" p; g$ n+ Z8 H$ y
(2)企图创建无效的几何模型
: S+ V+ h: x: W! b2 R(3)不可预料的调用顺序) [9 y4 z6 @3 q" K; |! C* F
(4)得不到的系统资源,比如内存或者文件访问等; j( e( |; h0 W1 l! Q
所有输出均为最新。
$ `1 q, a+ i/ n6 ELINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入. v( ]1 r4 u$ C4 H8 [+ q
6 Y& L1 r, v& w1 ^2 错误侦查7 K3 h* l% N7 B* t k8 k
通常返回错误状态或者异常。7 p& R P2 U9 ]
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;+ W0 b$ p5 H* M% C, v3 {6 ]
对于NX Open 通过 Try/CaTCh的架构进行处理
s9 i+ z1 V6 e: d3 错误报告$ G) e2 h1 x+ h j6 X* `
(1)获取错误信息
. C3 A# J7 [2 D: f5 _4 m错误信息,获取一个错误码,并有一段可读的错误消息$ w- f; {9 F; s
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理9 u. U& {: A9 k4 u
NXOpen 通过NXExcepion处理+ I" k& M9 E6 F# _$ u' }1 j( d
& F5 i: _3 q$ J" A& \! V" s (2)建立报告
7 S! i/ q1 |- h& f$ Y0 ~ 需要增加信息去报告什么操作导致报错,以及如何处理$ R+ J/ V* O. ~4 C3 I
& x3 g; K$ J! C7 O% X5 z, H1 ~ (3)报告错误9 d. J7 W- b$ E
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。3 _, f) X; V) F, I' l
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
' b$ A9 h: ]6 o0 I# _2 t4 x
! ?/ a+ @$ `" \5 u5 o% R) k (4)错误修复. B! w- ^* k+ o# v
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。 h! A" h; T- N
NXOpen提供的错误修复包括:
/ q* |" M7 E. t6 U# Z/ O a.方法定义给于异常处理,让程序员来诊断错误
! |% [7 V! o. K b.当方法错误的时候,可以返回NX回话和part到一个有效的状态- J0 z: H* K! U
c.UDO进行处理,去返回曾经的状态( B0 c7 [- C0 S& Z4 [; e+ z) i p
9 w, y5 Y* {9 M& G5 m. v0 Q
. i8 K/ T( B3 X( J3 P- // ufun 的方法
$ }" k7 E, h7 ]' j -
# R/ \ i' [, i - int status = UF_MODL_create_block1( UF_NULLSIGN, _7 P$ |6 C% k4 A# X. C0 T
- corner_pts[i], edge_lens, &features[i]);
2 f/ K. u3 L! H6 X - //check for return value
9 ]0 M% x: W5 }/ y* |/ Z - if (status != 0). K* ]* O2 n' Q, @ [
- {( L$ F8 i1 X0 Q9 r7 R
- //get the human readable error message
5 P: h% i& @( D - UF_get_fail_message(status, ugErrorText);$ p/ h1 h4 l/ X( u& ?/ K4 r
- //report error to the user
, z$ I$ m- N- F7 t( T" i - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
7 G+ F! M0 _+ K - &ugErrorText, 1, ..... );1 R6 G1 ^5 [. a- C0 N
- //report error to syslog
& a8 ^9 d/ o/ ~) l$ {- M - UF_print_syslog("Failed to create block\n", false);
# D: Q1 p8 y0 r6 v. i) x6 u1 e- {/ \ - return 1;
q$ H5 Y) x* }% \8 O g - }" F; X( @- _8 j9 s; Z
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
) Z6 r7 n+ h! _1 O$ N6 k - if (status != 0)
, |7 M! _: J- I& B5 k! K - {
1 A6 @: f0 K7 m- P% S% Q7 \8 E; R! l - UF_print_syslog("Failed to get body from block\n", _
0 b) a/ o: |" I( U& e& c4 b/ E - false);
, X( H4 H8 i( F1 M6 j7 {. d8 g - return;
. X& G1 u, T: `0 ^3 ^; ^) J - }
& l5 [- Z) t( v' q -
- o# p3 {9 x( f/ ?8 A& B, e - //NXOpen 的方法,以下是java代码 b) Z3 o3 [' z, K2 ~) I
- G+ y! x5 S4 V- Y9 d$ h, @5 w D! H
- try6 A. B9 X4 B, Z% `' N7 F
- {
; x+ j. Z' r% w/ q+ l' ^+ B - Session theSession =(Session)SessionFactory.get("Session");" Z( Z/ T, I7 R) Y" k- P
- Part workPart = theSession.parts().work();7 P+ \& G8 v. [* B C5 T) m' o
- nxopen.features.Feature nullFeatures_Feature = null;9 |$ L' n. h. s0 @8 K. g) [1 \6 `; [
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
+ D! m/ [5 i- ~8 f - blockFeatureBuilder1 = workPart.features(). _& \( o4 Q4 s8 Y. o
- createBlockFeatureBuilder(nullFeatures_Feature);! [! g+ S3 m3 q+ L. [1 Q% d5 m
- }
; E+ k9 D/ t m - catch (Exception e) \) Q0 w! D k/ z1 f
- {
( y6 z6 A3 v! s& R - //report error to syslog, Message property on _
% Q. S8 h n6 q' q- D - exception object already has human; y8 [; a4 r' ~; v4 o S+ a; c
- //readable message
, g5 |5 H' I: k6 `( c - theSession.Logfile().WriteLine("Failed to create _
4 a% S9 J8 H2 c4 \0 L" r - block", + e.getMessage());
4 x& j1 D0 [( v5 S% M - }
复制代码
- p+ B# `# L9 X: F1 ^8 f) s5 V* Y9 U4 j8 D
8 _& D, Q' @4 r6 s! J+ O c8 Q |
|