|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX 二次开发中,错误异常的处理详细介绍
" L! q3 }) O9 U( @ V' Q
9 S5 K2 f% E+ H( |8 n5 e# U错误处理" T# J/ f- [; G0 x, t. v* C# C
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( z6 z) i/ x7 k: U
(1)无效的参数输入
6 D' r' w/ u$ o* G' L: H' d(2)企图创建无效的几何模型* o# Y3 O$ Q- t1 b" Q
(3)不可预料的调用顺序
; U. [3 n/ ~( ]- b `& H6 {(4)得不到的系统资源,比如内存或者文件访问等
- X- u6 x, {! r 所有输出均为最新。$ A) |. v, Y0 G0 Y v' w
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 T0 G$ Z( m4 L, {- P
- G0 \* Z/ T U* j6 v2 错误侦查
- f4 f* L* t0 |( e+ s5 b通常返回错误状态或者异常。+ n1 u0 t( j9 R3 C
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
3 C5 ?- |! \4 K4 N8 A% A8 T9 a2 j对于NX Open 通过 Try/CaTCh的架构进行处理
5 }$ u: L3 D3 c3 错误报告/ d8 t, H' Y% m7 w
(1)获取错误信息! t B9 q7 O8 Z6 b2 H F$ H% Y
错误信息,获取一个错误码,并有一段可读的错误消息
+ u6 Y, r- t$ b4 o5 U; z ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
0 P @! R- e% \2 r. {- Q NXOpen 通过NXExcepion处理' ]7 i _7 X0 N1 y+ R
. U5 g% h" | l8 r, g
(2)建立报告3 r3 C/ M6 |2 f2 Q; Z c
需要增加信息去报告什么操作导致报错,以及如何处理) m* B8 s& L3 L8 L' S
8 z" Z) V6 u9 ~; a& k8 R (3)报告错误4 _% d$ S3 s# T3 |. @* q; s& t
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。" U1 ]) w. b5 {% f! q/ `) x
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。8 B" m9 u2 Z- d" d ]3 j
" \& o" [' q* Y+ S9 ` (4)错误修复
! S- e; D9 _+ ] 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
* b) G9 S4 P0 j NXOpen提供的错误修复包括:; u7 d! _" z" V+ \8 K" b" k
a.方法定义给于异常处理,让程序员来诊断错误
1 d, H0 Z- A6 w3 f5 W3 S+ y b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
. W" u0 ?) k) } c.UDO进行处理,去返回曾经的状态( C) Q4 z6 D, m. @
: t" x9 t6 R; W- Z& M& U6 W$ F
- $ y) Q9 _" w8 U, K
- // ufun 的方法3 H4 L3 \# }0 Z' P
- % P( O$ w$ b" J+ f5 y7 I+ N
- int status = UF_MODL_create_block1( UF_NULLSIGN, _
3 A4 G2 D! ?& K* c+ v% w8 O( ] - corner_pts[i], edge_lens, &features[i]);
- w! h6 h Q1 J - //check for return value
5 `4 T% }4 |2 J - if (status != 0)7 E' d! K/ P7 b* x8 x: p% P# o8 u
- {; h2 A6 c' f: w# ?1 c
- //get the human readable error message
# B. B7 c7 r x( E - UF_get_fail_message(status, ugErrorText);
4 N/ w9 N+ J2 h. | - //report error to the user) E% N1 u& R: F7 T& h$ l
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _7 ]2 [. ~$ U6 j% J- Z( Z- K: C
- &ugErrorText, 1, ..... );
5 P; {- h& i0 {) Y - //report error to syslog" L% _, O7 e" F/ b( q) y' l6 E' |
- UF_print_syslog("Failed to create block\n", false);+ d: t2 G+ C" n1 w: C! V# e) {
- return 1;
$ {0 l+ g; ~1 _& j0 F) Z - }, E7 t2 ]$ i; e1 s: U- v
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);. p& D7 Q6 I _( |
- if (status != 0)
' N1 e) i" g9 x$ W; b+ S0 Y - {3 \" S& _& O& ^! ~; l C; }+ H; A: o
- UF_print_syslog("Failed to get body from block\n", _
) m: j- M0 A1 A0 V2 o4 h2 z3 d - false);
2 I* d1 w* i# Y. ]5 \ - return;. `: R/ H/ f5 J( ~
- }0 @( x3 k0 |2 W4 J
- - `: Z& C& E! a, q# ~* [& I
- //NXOpen 的方法,以下是java代码
! _/ p* |) A; u" V3 V4 G1 N - . J7 X- t+ e" e7 r4 P+ }
- try
! N! w, J: o: x! ^3 |, D) ^ - {& D2 ]9 O8 w/ f( A. B
- Session theSession =(Session)SessionFactory.get("Session");6 o6 g6 b! k' C7 m% p
- Part workPart = theSession.parts().work();3 @# U4 e0 K' r
- nxopen.features.Feature nullFeatures_Feature = null;
, C5 |5 S" v0 g0 A7 R. j* l- f - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;$ ~. P: W+ T; k9 n1 i
- blockFeatureBuilder1 = workPart.features(). _
7 J/ N, }! x) n2 _1 C) y* A" M - createBlockFeatureBuilder(nullFeatures_Feature);
2 i" R1 z' n8 g2 d( @' _5 ~$ f - }1 g d# d0 X: J; [; o
- catch (Exception e)% O2 A9 G6 v/ A4 a" p
- {
* o Q- a) G% u$ d8 P) P - //report error to syslog, Message property on _
; L( o$ a) {4 {0 s0 L - exception object already has human
3 ~" f& {( U4 U) A - //readable message
8 [3 F4 G8 H% u' U7 S. l$ e - theSession.Logfile().WriteLine("Failed to create _
& e. N0 c1 z7 d* G& H - block", + e.getMessage());8 j( O, @' ?. \( A+ y6 _( ]
- }
复制代码 # `/ [4 T8 O) U4 v" }, X7 N
0 T- ^" ~6 Q- F5 i7 Q R* r* R7 J1 ]
|
|