|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX 二次开发中,错误异常的处理详细介绍, j6 s7 x, i% i! f
( F* n J+ B1 o. b2 H% f3 S2 x错误处理
# y7 U: ?4 p/ }6 Z, @8 Y- R5 R) ?( l1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:9 F) M+ A2 p7 `3 }: G
(1)无效的参数输入
- p3 R. ~- q$ M3 P' C. K(2)企图创建无效的几何模型
* C$ h* ^" U6 l0 v(3)不可预料的调用顺序
6 ^ ]6 ~) ]+ [( q" C(4)得不到的系统资源,比如内存或者文件访问等2 M. ^! ]% w! Q |
所有输出均为最新。
8 P- |4 Y% {9 L5 s3 H9 ?& h- mLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入; V* R& D# E: |/ t g
/ r) N# P' ^& {% `2 n
2 错误侦查
+ k8 X* P. Q; i& Z/ M; G通常返回错误状态或者异常。
" S" W F" |( M对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;$ h4 b: b- k& b3 Q# x5 c2 D$ B9 a
对于NX Open 通过 Try/CaTCh的架构进行处理) `) r8 }" J6 b# ^ c
3 错误报告
* D# X& ]6 @0 |$ {7 \9 x4 }(1)获取错误信息6 E& H. X4 ]) X
错误信息,获取一个错误码,并有一段可读的错误消息
5 }/ v$ @0 N1 p' {5 P ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
$ g8 J. I1 W) Z7 m0 c) _% [2 F- `. z NXOpen 通过NXExcepion处理
. `+ h7 ^& k' _6 g! Z/ B ( ^- J* m2 _. c* V/ G" C5 B
(2)建立报告
$ p" i; F8 r' [6 w& E, s* Y1 h 需要增加信息去报告什么操作导致报错,以及如何处理
8 } e) N1 |1 d! e1 ? . q- O- K+ r4 A9 g" Q
(3)报告错误
0 C1 |. L5 o( d8 [+ O 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。* u' g0 |# m9 n' M$ z& `- J, _
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。; N% A# ?4 ?( t6 e7 e t) D% p# g: N
+ ]& X# `6 z5 U% B. B I, ? (4)错误修复
$ Z0 w) s# Y5 F 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。! b4 W( l# m; G/ x7 ^! l
NXOpen提供的错误修复包括:
0 Y* P" t. g4 a+ Q a.方法定义给于异常处理,让程序员来诊断错误, A6 |$ Q- [* s) y+ M
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
1 r4 `- u1 L1 R! n. x4 O c.UDO进行处理,去返回曾经的状态
- {: Z0 X- E2 L! \4 c- f+ v7 Q0 B- `) k( b4 ` [. K4 N7 V: o) P; \# x7 Q
- g; z; p9 d* a7 w) A3 z, u( [- // ufun 的方法
) y, \& s% p- N& @6 E. h5 s - 2 C! I" ?7 t7 {$ m
- int status = UF_MODL_create_block1( UF_NULLSIGN, _
3 W8 u# n2 P+ B4 y0 F/ ^, w8 p+ j - corner_pts[i], edge_lens, &features[i]);
. Q% d4 U1 l* ]; g7 b - //check for return value
- m- A; G& q8 B9 U* |& } - if (status != 0)* b# U6 j, c* A" Z [
- {
, z, R( Z: j2 a! Z6 Q - //get the human readable error message
2 A% a6 G- y/ q/ {) }5 p - UF_get_fail_message(status, ugErrorText);( A) f- g. Y+ ?- U4 A
- //report error to the user9 m# O" E# m$ L& W: h) E! y$ Q/ B
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
: P" \4 F U1 Z/ R: f - &ugErrorText, 1, ..... );
$ B: W: g4 V3 \/ ]1 K! @; O8 W - //report error to syslog3 k& U# O. Q( ]* f9 ]& E: u Y
- UF_print_syslog("Failed to create block\n", false);( d* R; ]$ I7 D. t8 j3 y; s: M* s2 R
- return 1;
0 ?9 _ [* A6 f - }
# n4 t b& ?: d+ @; c3 \, J8 S - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);5 u) G( D8 j. X. D
- if (status != 0)
' j- t0 u5 |# U9 |8 c. _ K - {7 U2 T1 Y% V/ ~$ ~$ y
- UF_print_syslog("Failed to get body from block\n", _
' a/ B( U7 i; H a/ P+ V - false);) [; R/ T. A* t1 a% u( [$ b9 a: G
- return;6 j4 {) c* G* s P2 U2 a
- }
: F! O( X; Z+ v. M* ] - & Y# v8 R: M/ H% p4 G# w
- //NXOpen 的方法,以下是java代码
' u6 Y; W4 Z G* @& ? - 0 w: k: `2 E: G. X: d
- try. x2 t5 I: u4 X3 x% `! _
- {
/ T9 }7 A# d ?5 l6 I c - Session theSession =(Session)SessionFactory.get("Session");6 C+ @ C% a* ~/ q' E$ @
- Part workPart = theSession.parts().work();
$ o# i+ j( `1 D- q3 X" Y - nxopen.features.Feature nullFeatures_Feature = null;
8 p) ^$ h1 T) K r% Z) I& |% o - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;$ C3 o4 b+ [- C& @: G) i
- blockFeatureBuilder1 = workPart.features(). _6 m3 V: p( f0 m1 W9 ]! S
- createBlockFeatureBuilder(nullFeatures_Feature);' s% p9 x3 \) K$ ?0 a8 w
- }
9 j9 Z. v! @* y$ r7 l - catch (Exception e)9 f- C; e. q5 R; n% M9 f& m! k
- {
1 D$ c/ p1 H9 s6 W - //report error to syslog, Message property on _. [0 Z( _$ [# g7 `; x
- exception object already has human
( o+ Y# V8 k5 I+ m; S# F - //readable message
1 v& N; U- U6 c' e, }, T6 @! v- }$ @ - theSession.Logfile().WriteLine("Failed to create _
: T# r* y, G9 T/ [9 ]0 t) B9 h1 i - block", + e.getMessage());
+ T. b; b3 \) \! B - }
复制代码
6 D: u7 ]8 d7 [* V. _
# H) p" R3 x6 W& U: s* ?4 {& A9 k7 P
|
|