|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍 @+ f. ~8 d% V. M
3 n# {7 c$ x, }, r
错误处理
# w( v% ]9 n# r/ c# K1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:& g: ~4 m/ ]- ~ z% b
(1)无效的参数输入+ E; ?0 D8 b) s5 X2 W- a7 ^5 A' W
(2)企图创建无效的几何模型
! c7 K$ ]" \# T# N8 C0 P* S0 b(3)不可预料的调用顺序" [: i( F/ y9 X7 N" X# T
(4)得不到的系统资源,比如内存或者文件访问等
" R- }+ _/ A' p2 x9 p5 [ 所有输出均为最新。) w, C P% s; ?9 o" ]
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入* h6 N& R& D$ T! K; z+ N
! k5 r1 t) j' h+ u
2 错误侦查
. f: H6 D1 w% k7 z) h通常返回错误状态或者异常。. J4 {% C; M S7 o$ j% G: q8 s
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;3 h- j) [' _! r- X- H
对于NX Open 通过 Try/CaTCh的架构进行处理
0 z& S. d" ]/ [$ x, t1 h3 错误报告
. Y* m. n5 I2 n% x$ B(1)获取错误信息
8 s$ G3 W% H3 K! d4 k5 r2 v错误信息,获取一个错误码,并有一段可读的错误消息5 e2 o4 T" H8 X( m4 b
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理; M- A9 j# K& a
NXOpen 通过NXExcepion处理
& h4 l8 g6 m1 {0 } 5 e) |" ^. }" G; _+ ] `% l
(2)建立报告
, v; W3 }5 \7 }' Y) b, q2 z 需要增加信息去报告什么操作导致报错,以及如何处理
! e; Z( r( V( L) g" Q* m ( ~" Y2 v8 G9 k9 l* b& O$ u1 w
(3)报告错误' v: ]4 R/ z$ G8 ^8 Z
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
. |. F2 h3 J$ q9 @. n( R 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。$ d7 U) s) ]3 A4 J9 p
k: k1 m5 O. L/ [8 F* K, N (4)错误修复% z; r! f. H0 v" O Y$ R* J8 g
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。+ q: w/ j7 b4 w, g9 {
NXOpen提供的错误修复包括:
1 i+ t$ o+ [; s2 U7 p; C+ [ a.方法定义给于异常处理,让程序员来诊断错误* R7 W% \ n2 L
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
4 H: Y7 O4 O& a- L4 }4 x c.UDO进行处理,去返回曾经的状态
/ S4 G) x. X$ U7 X8 }- G" ?! P- e( j1 M7 Z* `! q
- , k4 R$ z+ F% } n, j# t( p
- // ufun 的方法1 O! k( T. y' m" J9 M1 X
- - `1 C# ], V7 h6 u; t9 ~
- int status = UF_MODL_create_block1( UF_NULLSIGN, _
8 h3 |7 a: n h4 {: N( A, S9 r - corner_pts[i], edge_lens, &features[i]);# D' p2 {; X& g3 }1 G3 @
- //check for return value
! e X4 `9 j/ n; T- m) b - if (status != 0): y, a" t! m$ ]! b3 t) ^; e3 r
- {
$ H4 x! \; D1 \* q7 ] - //get the human readable error message
8 S+ q# o6 s, ~) E0 R' B - UF_get_fail_message(status, ugErrorText);& K5 |- ]" D2 }/ h, U" i
- //report error to the user- u/ x5 t/ C/ J& N3 [
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
; m7 Q8 |; e- g+ r8 _ - &ugErrorText, 1, ..... );
a# o2 a( J' v9 `* |- M' j4 A - //report error to syslog9 K) N+ h2 y, R1 \0 M0 L
- UF_print_syslog("Failed to create block\n", false);
2 W5 [: ^, n3 d1 I2 b - return 1;
" t$ ]4 Q: g$ h; {' q% e$ Q2 z - }6 [3 F8 X& s, H1 [' ?2 `
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);+ t" v9 z; O0 v5 M# b- I
- if (status != 0)3 y) l H0 v7 ^9 j1 N% E: i
- {' u9 b w: g4 b" W6 ~3 C
- UF_print_syslog("Failed to get body from block\n", _
; f, p! a) J; Y8 F - false);
" i B! g6 Y7 |1 a) j$ F: L0 d; c - return;2 ^/ U+ `& J9 y0 o
- }6 @% [( {: `8 ?
- ) ^+ i) P" T7 r4 T2 l7 n- V
- //NXOpen 的方法,以下是java代码
) r- g8 x2 V" O7 ] -
# O# z* D! }+ y4 k - try. L3 p( g: h, {3 R" f6 M2 Z; X
- {3 J0 n/ }: n3 e: L/ C
- Session theSession =(Session)SessionFactory.get("Session");
8 S" a- |* T1 ~$ E9 j - Part workPart = theSession.parts().work();
4 a. O7 U' H3 G$ E - nxopen.features.Feature nullFeatures_Feature = null;) m1 |6 F, Z7 T& \
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;1 H# D% c4 i" s8 Y
- blockFeatureBuilder1 = workPart.features(). _& J' o) O6 y; O5 G
- createBlockFeatureBuilder(nullFeatures_Feature);
2 W5 F- D5 [! |9 H( a+ P% c - }
+ _8 d8 |. z; L% T/ n - catch (Exception e)
8 u0 i8 G) H! {; h! r - {
$ C) m( O5 a0 Z6 }0 |! d4 w; b; d - //report error to syslog, Message property on _* ]: C- u! s4 Q
- exception object already has human* t% q: X# |9 j- m3 F C' `
- //readable message- r; ^. j9 x& `8 b- ?
- theSession.Logfile().WriteLine("Failed to create _
5 b: m! D7 H* h M6 [# v, U - block", + e.getMessage());4 p8 _% j: \' N2 X1 \" k }6 p
- }
复制代码 ; p% u5 V3 w$ S& m" g/ N$ j9 U
4 ]' m% [) d" O C' D# n$ ]8 U8 Q' R+ M1 P4 M9 [
|
|