|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍* ]% ~$ ^& V+ p, o
3 i: v$ w `0 h错误处理5 e: Y& D( M1 X+ O6 Y( D& W
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:. c" Y# o6 l/ r/ Z) P2 O" }; R2 N$ K* \
(1)无效的参数输入
" u% d1 a, D9 t3 z% K, X(2)企图创建无效的几何模型
5 j. @3 Z9 Q' A0 P# J! x8 L3 V(3)不可预料的调用顺序; f' x0 W7 s. e3 F; F
(4)得不到的系统资源,比如内存或者文件访问等' j) m+ j: k+ }* q# p
所有输出均为最新。" F5 _$ n# z+ e$ T
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
5 I+ l7 z6 D+ L$ N
8 y: I* ^) B. e. Q( \! n3 n4 w2 错误侦查
- J& k5 j2 @, Q通常返回错误状态或者异常。
$ M6 d+ ]. m9 X( a' {对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;% U y* \$ D, [3 j: u% u% m! G
对于NX Open 通过 Try/CaTCh的架构进行处理
# C' f7 l/ `' h& i2 }3 错误报告! k; b1 j: x L+ q, a3 R! U' n
(1)获取错误信息: t. B; x ~9 _
错误信息,获取一个错误码,并有一段可读的错误消息
7 Z& d/ |! F8 D, ?+ u1 ? ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理1 `. J7 B9 S! Q
NXOpen 通过NXExcepion处理5 ?) ~$ N/ D7 J/ E5 G( w. H
) B( y' K, |" Z" Y* J1 z6 }3 I! ?, K (2)建立报告
% z: b# h; V( Y: D. P 需要增加信息去报告什么操作导致报错,以及如何处理
1 D* n/ g4 V; x 1 ~7 M- u/ ]1 G9 |
(3)报告错误$ |% r8 C t/ {* V, O* L( l( p) O/ K
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
3 z1 x/ G5 `; s& |( a 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。* b3 b) _+ Y* n) [2 ]
* Z# l2 y4 G" {1 m, U! K (4)错误修复
9 f! N" y/ |! p2 ]5 { 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
& w9 W) a$ x3 M1 ^$ i4 s, T NXOpen提供的错误修复包括:
5 i7 p2 k2 q, Q, j' _- Z a.方法定义给于异常处理,让程序员来诊断错误" h5 v6 x7 M5 ?; A' @
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态8 h& A9 m7 V* e' b# ^8 ~% p( J
c.UDO进行处理,去返回曾经的状态
& l+ ]( S; V$ e7 \# t
6 W* k3 S; g/ ?( L1 k
, F# ^! {0 N7 L1 K+ [2 C8 z- // ufun 的方法- h. ^/ }/ r# R; l
-
8 A/ B6 Q: K$ {+ ~) B6 m& ~5 x - int status = UF_MODL_create_block1( UF_NULLSIGN, _8 I4 u, x: [. x% \( V% m0 h
- corner_pts[i], edge_lens, &features[i]);" U6 e+ i) d, v, E/ c k: y
- //check for return value
" g8 j1 u1 O( F9 e" j - if (status != 0)
7 |" X; O% m1 ? - {$ t, ^+ A$ v# X$ v x# \5 \# o6 C
- //get the human readable error message
3 v- O" M! c. a - UF_get_fail_message(status, ugErrorText);# f- H% a, k% a* C
- //report error to the user
8 o+ o$ V: i" \4 w: [. O! q - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
. G4 W4 o* P# { - &ugErrorText, 1, ..... );& G. E: p; @6 Z4 I
- //report error to syslog6 c" s9 Q. j5 ~, j8 p
- UF_print_syslog("Failed to create block\n", false);
1 S3 }5 D! r5 p - return 1;( d( l5 Q2 G7 I- @! t
- }. }7 X! }2 z! f" R9 ^
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);; ~3 O& n8 L0 Y; p1 I* f. \( j5 d( t0 F
- if (status != 0)5 A& v+ |' m1 L. a
- {
6 M' |0 ]( Q, g8 o+ f - UF_print_syslog("Failed to get body from block\n", _
6 G/ [8 u1 b- a( y& ~ - false); Z1 M, |7 P" |: b$ }% Z, U/ z
- return;
' I7 } v2 w- X* _ - }
9 r5 a1 L* ]) b1 J' V/ G: ^ - 1 }# P% g3 n- {9 |7 w
- //NXOpen 的方法,以下是java代码2 e+ U" t# o- I& S
-
" |5 `4 q! Y( k+ G: _1 | - try9 x1 {/ `) A+ Q+ r% O/ q
- {
r2 f1 j" N$ `* M# x& |2 P& W - Session theSession =(Session)SessionFactory.get("Session");, y9 L1 G* q, o! G' @
- Part workPart = theSession.parts().work(); K/ Q7 L: K, v
- nxopen.features.Feature nullFeatures_Feature = null;
. l( ]' N/ A3 i" T" w4 P - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;" K6 y7 y6 B% f
- blockFeatureBuilder1 = workPart.features(). _; m0 b# k) d4 W+ ]# @6 M
- createBlockFeatureBuilder(nullFeatures_Feature);
, s. h, y; C2 g. r3 D+ N - }
2 M, b5 f6 J; t - catch (Exception e)
; b( s! \& C; B& j- b t" l; l4 F - {
6 Q$ h' @3 y9 @ - //report error to syslog, Message property on _
! ^& ^6 q+ x0 S2 H: U: L - exception object already has human
9 |' O0 I; U6 r+ K - //readable message
2 R5 v' G- c6 ^, h* Z/ K1 | - theSession.Logfile().WriteLine("Failed to create _& w8 n' b4 X2 t" j: ^( n7 l0 K1 _
- block", + e.getMessage());* A4 P/ a# w6 j! B6 M8 H3 e
- }
复制代码 # }. H9 P+ K6 x! p D# \0 r
+ @6 P" r( x; u9 e5 `5 ^1 b/ ^ n
/ `! d5 l8 t9 X2 m. h7 N |
|