|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
9 l2 k( Z* x$ d; s+ G: d. {) c- Z5 ], z
错误处理
* z6 v, R4 i5 Q$ d' Q% P' w6 a9 F1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
7 O8 s9 _0 s! h# {8 r' e6 i1 T5 O(1)无效的参数输入
! Z* U! h" R5 o: m(2)企图创建无效的几何模型' J- L$ V" [8 J7 X7 i0 a$ r6 _! C
(3)不可预料的调用顺序9 D) `: V$ b P
(4)得不到的系统资源,比如内存或者文件访问等
) O3 v! C" r" R. Y1 M, M6 @! V* B 所有输出均为最新。
" r+ b' v2 O- R6 O+ JLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
9 [# }1 w9 o& Z Z' ]1 }
9 x% v2 m5 b X& t6 T2 错误侦查8 Y% C M% T6 k* b7 |/ E& s
通常返回错误状态或者异常。
0 a3 m/ Z3 b8 v1 f2 D5 a对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
+ b: j1 c# z: n F/ } B' B3 v对于NX Open 通过 Try/CaTCh的架构进行处理
- W- j- E$ n8 u8 K+ k: W7 Y/ k3 错误报告% {0 E5 B: V7 [! E0 y
(1)获取错误信息
: s+ U Z8 Q" w6 ^: c错误信息,获取一个错误码,并有一段可读的错误消息
( z& X6 o8 C" j* ~! U: w+ B' B ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
6 b! M) Q8 A+ Z- `2 w NXOpen 通过NXExcepion处理
1 \! O- g* w. J8 D! f( c . ^$ Z/ E$ M( A- C B: O
(2)建立报告8 \+ G# `, S0 v. E2 b" _1 T5 T, D
需要增加信息去报告什么操作导致报错,以及如何处理
6 M7 ]/ l( B" B+ }/ n; _- [4 i 2 ]8 n7 d+ `" }% U! B' _. D
(3)报告错误" Z8 `& ]: l) H3 |
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
; J, b, P. R/ `, J1 U" ?9 m 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。( |+ j" _2 U+ P- x" |+ f a
7 q5 z6 J$ \2 J1 A
(4)错误修复+ ?# V+ y, _% l, W
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
/ q; L' B3 W5 W NXOpen提供的错误修复包括:
# C" B+ o( p% W1 H5 y% l" k2 E a.方法定义给于异常处理,让程序员来诊断错误$ Z/ g( @' p, h) O
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态( d; w Z5 n/ U8 b+ O. _
c.UDO进行处理,去返回曾经的状态+ X @6 k( E) V; ?
+ L2 c" K$ G* B0 W; H7 y; E0 [
3 X u5 a, @0 b h- o# f- // ufun 的方法
/ H# e, V R0 U8 |$ _" p& t( `7 |' V7 p& i% H -
/ Y3 S7 L2 H- h1 p- r- F) e - int status = UF_MODL_create_block1( UF_NULLSIGN, _
7 j F5 k6 l9 N# p - corner_pts[i], edge_lens, &features[i]);+ _$ C4 {( X) H6 B
- //check for return value9 Y4 m) V8 E* u! y/ @) C7 Q
- if (status != 0)
& r9 {$ n; \% [- J - {: g+ Q- s( [7 \% h3 v$ {: R
- //get the human readable error message. r( l: P) ^: ~/ Y. j7 q# h& \
- UF_get_fail_message(status, ugErrorText);
( N& A7 m# _/ j( A6 S1 I( r - //report error to the user
7 `# n, o/ \# P - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _( C' u. I9 y' }0 g1 s. S# n
- &ugErrorText, 1, ..... );
2 q7 T6 c( S. W3 W, V+ z - //report error to syslog
5 f/ P# P: ~% i& V( o - UF_print_syslog("Failed to create block\n", false);& u# w9 u* |) R. {0 Q0 i& \
- return 1;
, ` K" c5 N f( w% x. x8 g - }
! T4 s$ M) X0 J& i - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);( e, J2 x2 b) `
- if (status != 0)+ C2 j5 W! T& d. l9 H: R9 Q
- {& r+ c, `8 ~# o% [& [
- UF_print_syslog("Failed to get body from block\n", _" b# M o; w t# t- m; J/ W
- false);, j& w( o2 S$ l3 @/ ^
- return;
% h& R( ?3 q& n" E" b - }. J# R' e0 d# k1 X% ~7 X: b, R* C8 z
-
" O# s. U% T, P$ K2 u1 q - //NXOpen 的方法,以下是java代码! V, a7 w' Q$ s3 b8 r
-
" L9 w* \6 x9 G) j# F5 i* d - try/ Q5 |+ |" ~+ {
- {( s9 a5 ~' J* C0 v' z, w; L" |
- Session theSession =(Session)SessionFactory.get("Session");% u7 r% u% J J; S. M
- Part workPart = theSession.parts().work();
! h; d, W+ x2 g, g, n - nxopen.features.Feature nullFeatures_Feature = null;( g* y' g6 b" S0 B" l: i
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;( Q9 C' i! v8 C0 i& I
- blockFeatureBuilder1 = workPart.features(). _
; C1 g0 T# H5 ^. h5 u; \ - createBlockFeatureBuilder(nullFeatures_Feature);
! r& i! d/ ?: E; H" ~6 H- v - }5 B$ y/ p3 u0 U- D" `8 {
- catch (Exception e)
" @: S7 A: `, k; G2 D7 C r; X% X - {
% I6 x% n; f6 b - //report error to syslog, Message property on _+ _! h- y+ U3 h1 k( O! T
- exception object already has human- ^- b3 A% m4 I
- //readable message5 C0 q1 ~7 _' j0 }5 \
- theSession.Logfile().WriteLine("Failed to create _
' e% s! x9 f( _! Q: F( \ - block", + e.getMessage());8 O8 h/ d/ y. A
- }
复制代码 * l* x1 N9 z: n9 u z- Q' C1 c
1 Y8 q0 x) | @% |3 u$ ?
3 k( u# u) ~( q6 d0 \$ \
|
|