|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
- ^7 M" x3 Q) l& M
( a$ I7 G: m7 d2 ]7 c错误处理" P1 A; |* C% t) s
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:. w6 i- Q1 d( q9 q- ~
(1)无效的参数输入. d3 p- x4 R G, q& T' Q& M* k
(2)企图创建无效的几何模型 r! O) C6 `$ L3 s6 p! I: p
(3)不可预料的调用顺序
1 D6 h5 A4 P/ H* r5 {* P% [/ v(4)得不到的系统资源,比如内存或者文件访问等
* c1 I, Q. |3 d) D+ {6 i 所有输出均为最新。
$ y4 B! w! t( R: E0 U2 ~! p/ {8 yLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
9 R2 a# M2 |5 ?7 D0 X/ u% f2 C- L# w ]
2 错误侦查
; K3 B2 M5 e! E+ Q, W. D# F通常返回错误状态或者异常。. t- `; _$ B! z2 s% J; X
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
) {: \ `0 W' y对于NX Open 通过 Try/CaTCh的架构进行处理
, j( z. V. K+ X: H/ c/ L; u3 错误报告2 g/ f2 d, X/ }! M( Z3 u5 l
(1)获取错误信息! e) I7 R) q& ] b1 F4 |2 b
错误信息,获取一个错误码,并有一段可读的错误消息
A2 @2 m1 h1 H: [: F1 I: l ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理+ o0 {8 O# q" E
NXOpen 通过NXExcepion处理# u$ b; M) q. B' k+ w" e+ j% P z" U
9 H/ e" \: y' G2 U4 @' J3 X# K (2)建立报告
3 o0 R. i. u: ~8 P* F9 N! I 需要增加信息去报告什么操作导致报错,以及如何处理
+ T& m* k# X! @# ^ * W* G9 K1 b$ b. x) Z1 }& t
(3)报告错误2 N8 b/ O8 p5 Y/ o6 E
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。, _' f: p3 B: {8 J3 K
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 m1 {" w. K: E" b
/ C4 V7 u) |& p) b& A2 C (4)错误修复
+ _% X- `+ h# A S( l8 x7 j 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
* U4 r# r$ b5 [5 S b NXOpen提供的错误修复包括:& H, b) \7 E0 Y2 M
a.方法定义给于异常处理,让程序员来诊断错误- E9 Q' R4 Y5 t# `/ e
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
/ N% |1 { x) k: Z" R c.UDO进行处理,去返回曾经的状态6 ]2 @" B# ^, @0 l) h0 _, ~
, o J( b9 {2 |, f' l
5 t. L3 i1 h4 C! D N0 Q- {* G% R- // ufun 的方法
; B" |0 l) M! J, `# ?- ~ - . h0 |8 ~) @; V! \5 e# Q
- int status = UF_MODL_create_block1( UF_NULLSIGN, _
! T) v6 T0 {% x0 \ - corner_pts[i], edge_lens, &features[i]);
. k# C* }% {8 c% L - //check for return value9 T7 |( J$ ?- v& _3 [2 h
- if (status != 0)
0 t& i- f; Z, V5 j ? - {
8 v- q1 h1 R: _" b, ]* e4 A - //get the human readable error message: `1 ~4 j5 d/ V% C
- UF_get_fail_message(status, ugErrorText);; }0 P$ P6 m7 {* f4 Q
- //report error to the user! u" u2 g( v! q8 O$ O8 C1 e
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
d5 x6 `$ a& f0 `2 ?! ?' s - &ugErrorText, 1, ..... );' |9 d/ \0 T- A6 _( z- d5 C
- //report error to syslog
/ k$ ~9 F1 [2 }$ G - UF_print_syslog("Failed to create block\n", false);2 `/ [" I- M, O/ S: z; @1 K
- return 1;
5 L( D$ l: D L# F1 h - }4 J) {# ?5 |; W* x: E
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);; S7 }* Z: {% d- M. w/ Z8 Y
- if (status != 0)
! q6 ]6 @6 d% n+ S - {
! ~& v3 l! f, {6 F- f - UF_print_syslog("Failed to get body from block\n", _& e' z3 \0 [8 L* n$ l1 i
- false);4 S, E5 [' }: ~9 U/ M ^, X! O
- return; j& q: I4 }5 L: Z
- }1 O( c- O; L3 p) u
-
! M8 K9 M- K5 E! _0 D' ]* ?+ K3 p - //NXOpen 的方法,以下是java代码 B' w1 i) }' V' c" R+ G; t1 S
- * t1 W& k9 J9 i, P2 H [0 N n" a
- try& G$ L! f. s: _: z& z" M8 T
- {
8 Q8 {; Q4 Q, R/ D. _: a0 ] - Session theSession =(Session)SessionFactory.get("Session");
5 K. P( o" S. M0 H* D - Part workPart = theSession.parts().work();& ?, r* m0 W2 j
- nxopen.features.Feature nullFeatures_Feature = null;% A. h0 @5 v( P, s4 N2 \
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
, x2 E" B; p- N - blockFeatureBuilder1 = workPart.features(). _6 W/ Z: ]8 X. H, G( W5 _ P I) j2 U
- createBlockFeatureBuilder(nullFeatures_Feature);
4 v3 \1 N$ c- j' l( m* t - }
4 S% L$ ]. n* C" ~; } - catch (Exception e). X9 v- _/ A) i# ?6 g, [
- {3 y, M/ Z3 i: v" c$ J% ?! V/ p
- //report error to syslog, Message property on _
' N) K' ^& e/ x1 i: n; D - exception object already has human
" v7 t8 c+ m5 L4 z) r* B0 B7 a# C - //readable message
7 W# h! _) H3 u3 b1 ?" K - theSession.Logfile().WriteLine("Failed to create _
% o0 r- g! \! Q9 U( G - block", + e.getMessage());1 ~# ~7 Q% j1 v( {6 y T: u
- }
复制代码
# U, \) ^5 v4 c6 x7 `! ?& L' x' h/ i. W7 D) w# l: z. J. L/ Y! t* T
5 I5 F, B Y' u, w
|
|