|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
/ e- ]6 `, q, g( U6 ^
8 C/ s: @- k& `6 m0 C- ~错误处理0 U. \) D, Z+ ?& Z5 q
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
2 @( }6 F2 X: p3 G(1)无效的参数输入
; G' j- Z& n) ?0 y& h& h9 D8 }(2)企图创建无效的几何模型
8 U9 K+ k3 \. j0 {0 ] a& T$ B(3)不可预料的调用顺序" d1 `/ E- R; L# \ {/ p' m* }
(4)得不到的系统资源,比如内存或者文件访问等
6 P0 F+ a& Y6 Q 所有输出均为最新。$ Z n A- V# E( l$ d# {
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入; W( {5 M: k8 r' k
7 j5 |$ u. R7 k2 M9 f+ C2 错误侦查
, D5 p* @! I2 [* c4 Z# O9 C* p通常返回错误状态或者异常。
6 t! b* e" u7 a6 s" v3 {对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
) b: }9 L" D. s3 }0 ?$ t对于NX Open 通过 Try/CaTCh的架构进行处理6 J( a: D- r5 M8 a" X; |
3 错误报告" \4 j9 P) p0 f/ h2 i
(1)获取错误信息; J5 Q# _3 M# c+ @8 r( t ~
错误信息,获取一个错误码,并有一段可读的错误消息
, s/ L% M1 v$ x r+ O# X+ Q6 u% l ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
" X0 r! `+ Y1 k, _8 j/ a6 {. P9 P NXOpen 通过NXExcepion处理, x0 T: a! A1 D- h& t
1 }, a/ t# v, |, _* e
(2)建立报告+ W" g- |+ P8 }! |2 k, `
需要增加信息去报告什么操作导致报错,以及如何处理
! |$ l! m1 F5 h, P+ ~# X
9 P( b: N/ N) t' B) |/ C! ]( s% L (3)报告错误
5 S1 B- j7 m7 ]. e 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
* J w! k. C# N& | 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
# {) F( H% S6 V/ ] q " f' O) y" z" E7 ?+ N! Z6 e9 I# g
(4)错误修复) }) R: _7 |9 o P0 ?" g0 w
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
, }+ r; O4 N2 a% J7 k6 k+ g& W NXOpen提供的错误修复包括:; ]9 o+ y$ S. L5 r' c
a.方法定义给于异常处理,让程序员来诊断错误4 Q3 `3 X) m) V1 f5 p
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
; W k p& Q& f, k* [ c.UDO进行处理,去返回曾经的状态8 u( v& m1 z% P2 ?& F' l# i
0 B" e U. d. D
% L } i9 Z% B- // ufun 的方法
- I! O( f- c8 W( } -
& o! l$ Q* y: c+ Y1 a5 W% S - int status = UF_MODL_create_block1( UF_NULLSIGN, _& [) c! ~: D) c5 t6 C
- corner_pts[i], edge_lens, &features[i]);, j' I1 x% c1 S3 f* ~
- //check for return value
( c5 ^6 [& p- |8 C' C+ y( l6 h. Q - if (status != 0)
2 U# n; ^+ o) i! r6 n' W - {' L* h5 u) W2 C* M# B7 H$ i
- //get the human readable error message+ L, Y& G4 U; ]) t+ |/ z D* t
- UF_get_fail_message(status, ugErrorText);
# C8 A, J0 \$ d: E6 X1 | - //report error to the user# U7 f5 c( H. P
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _3 c& k) P* ]5 s2 }! s* Q5 N
- &ugErrorText, 1, ..... );
( ]% \/ H! K4 f* g, {" N$ T/ Q! k" | - //report error to syslog1 \' f% Z' s% k* \5 b: q
- UF_print_syslog("Failed to create block\n", false);6 a( c. V( ]; H% E
- return 1;5 \6 ^4 [0 s/ Q1 M& }$ w
- }' U& N9 x p$ @7 Q3 e) U# h
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
/ B6 P+ D) |0 G4 P2 Y0 w - if (status != 0)7 y9 s' q+ v6 W% X. X) v R y
- {" O" _6 L7 z2 ~& P5 S% `3 y
- UF_print_syslog("Failed to get body from block\n", _
! \ q! o7 `( J# L- D - false);8 ~' g2 \0 E+ o
- return;/ A% h+ |; L0 K" Y% O
- }, m7 g; M5 U8 a! |( ?
- 1 w" K9 U3 C' A* i( t( b" L+ ^
- //NXOpen 的方法,以下是java代码
9 E& g0 A- P4 `7 a - 5 w% P2 ~# V6 h- X2 ~9 Y8 }: g$ h
- try# E3 D( B' z3 e! |( o/ R3 b
- {+ Z% F9 M4 t+ K8 D( W( o: B: S" {( z2 |
- Session theSession =(Session)SessionFactory.get("Session"); i& S$ x7 t b# h/ ~/ {9 k
- Part workPart = theSession.parts().work();
+ a; k: G! j% f, ~5 k/ X; f4 G3 g - nxopen.features.Feature nullFeatures_Feature = null;
+ H' z0 t! P2 w9 A- [/ I3 v - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
4 w$ S" m" Q4 O2 ] - blockFeatureBuilder1 = workPart.features(). _
/ t2 M# a c( k, J6 z; t - createBlockFeatureBuilder(nullFeatures_Feature);; Q1 D% J3 {( t& x
- }
& n- @, b, g$ p - catch (Exception e)
* D( {2 t6 K2 |! C9 p4 q! I2 j n S - {$ }/ V( E' G9 P* m7 f& b" f; W3 d
- //report error to syslog, Message property on _/ {6 f& }. J4 V
- exception object already has human+ _, ~% P3 ]6 V+ [8 A9 j; ?( R
- //readable message
9 P4 _; }! W1 y: c9 {2 [/ c+ j - theSession.Logfile().WriteLine("Failed to create _1 Q4 Z) s L9 l; q. W& u
- block", + e.getMessage());
' T. V: `$ O$ X - }
复制代码 + y4 T _0 `* q; w
: s- f8 M2 ?: M* V2 N
3 D. E ?' M! L: E% d A% ]
|
|