|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍- s$ d* }. W1 H( b1 g1 T
- _( l! s6 c \; j
错误处理# }3 V% `) v, s8 G( I
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
1 m' m. h; _6 ?. h. y) r. v(1)无效的参数输入1 b2 ~: T- H/ d* l
(2)企图创建无效的几何模型
( I3 D) U: S6 O3 v! X' g0 z(3)不可预料的调用顺序
1 s% _6 x. H& C3 R0 A5 i# Y(4)得不到的系统资源,比如内存或者文件访问等
, K) o$ D0 ]4 X) U( t: ~7 z5 ^ 所有输出均为最新。
6 b q) e# P- h9 eLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
3 K/ S% g7 N; A5 N' O( Y) \9 j& \& j0 w4 P0 Y( |- X! W! m# ~
2 错误侦查" y1 F; J4 v+ T* J }7 l, a& e4 A/ s
通常返回错误状态或者异常。
N( R$ U1 N7 Y; x对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
7 S. S/ D, Z" x& D/ j7 o! y; \# A对于NX Open 通过 Try/CaTCh的架构进行处理
( Q' H$ {' Z9 W- z; p3 错误报告+ n- L$ @. U) F: l5 l0 [
(1)获取错误信息9 B$ D6 u: m* Y5 m/ b
错误信息,获取一个错误码,并有一段可读的错误消息
" E9 [" i" E2 v1 P# ~ ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理2 E/ o! h7 o( q7 A+ W |# l
NXOpen 通过NXExcepion处理" r! y% H2 B9 q9 P( p
$ R0 E1 D! u+ R f% h
(2)建立报告
3 G& D5 C, I$ w) n 需要增加信息去报告什么操作导致报错,以及如何处理8 W" y2 O) `9 J( D* |
7 c6 \2 F7 ~- O: x8 s) U
(3)报告错误1 N, U; Z5 E+ U/ k" v+ a2 r: p- ?
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
+ D/ D0 X3 G& n' I' }+ g9 R R) D& ~2 U 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 y: |& t- `3 S. {; l: C; T2 a" ^ 3 b4 X e# Y4 A
(4)错误修复3 W+ j9 Q$ d" H; V& C+ h. x
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
$ M( }/ `2 c( t NXOpen提供的错误修复包括:
* t. w1 l9 {& o$ k! {7 D8 C a.方法定义给于异常处理,让程序员来诊断错误
$ n& T* L% f" s/ U3 P b.当方法错误的时候,可以返回NX回话和part到一个有效的状态) c* |5 k/ l1 H W
c.UDO进行处理,去返回曾经的状态# M& R& u. y; {) E' R; f9 u
6 K$ P3 j7 f& u. l. p: V' i- , d% w6 [ ^8 M
- // ufun 的方法
e: n1 R% [# ^ B2 [" Z - ! Z% ~$ R! f) l e) ]
- int status = UF_MODL_create_block1( UF_NULLSIGN, _( K6 A0 I: ^5 j/ x$ G d# M
- corner_pts[i], edge_lens, &features[i]);
. @' Q, Q) ]5 S4 y& T - //check for return value3 ~# S! f5 [2 l% N. _6 R+ m0 ]
- if (status != 0)
1 |/ h: {( Q- g" N3 e3 o3 }! { - {/ E, C1 A; U1 z9 h2 s- _ ^
- //get the human readable error message+ `6 b2 }& I- ^) w& U+ F& L
- UF_get_fail_message(status, ugErrorText);5 C. c, h l h0 k( S/ W: ]6 q
- //report error to the user7 b( B0 k+ h# a, ]- m% F6 {
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _4 V: A# p/ F$ x0 [5 l
- &ugErrorText, 1, ..... );4 L+ M6 _: A* G4 d
- //report error to syslog
6 e2 F! ]- c, G1 T - UF_print_syslog("Failed to create block\n", false);" |6 `$ t& l1 C6 X
- return 1;
) i! b- @1 p, c7 f) x - }: e; g$ X1 S- {8 y3 w
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
5 ]3 @" z' d& c6 l% }& A9 }- A - if (status != 0)9 \, ^% I! n! g! E5 I
- {
4 U6 r+ u U& N* \/ _$ I - UF_print_syslog("Failed to get body from block\n", _! f3 e+ M7 g6 r6 K/ Q, y( s
- false);
7 p* K0 D2 W: d7 H, J7 i - return;
: h& a' w& G7 h" H - }; M& K5 Z' F7 u
-
1 _( x' Z8 B- P* u8 H j1 M+ @3 c - //NXOpen 的方法,以下是java代码
7 z t) Z& u2 x3 h - . o4 _, L+ s H5 K( S
- try( C) I# g+ P7 J
- {6 [& _. u0 M5 G4 @
- Session theSession =(Session)SessionFactory.get("Session");
/ T4 c* m B9 p9 y - Part workPart = theSession.parts().work();
I( `, ~) d! v - nxopen.features.Feature nullFeatures_Feature = null;3 x6 z |1 ?$ [0 P3 n& U
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
2 P. E# E! x0 y2 X. x& X7 N+ Q1 N - blockFeatureBuilder1 = workPart.features(). _
|* E* z8 v8 J( J6 W0 r - createBlockFeatureBuilder(nullFeatures_Feature);
1 w# j9 H, l7 z; n2 x7 p) n5 X - }7 R" U8 N$ Y7 Z5 C4 ^
- catch (Exception e)) D! J# }8 a6 C" @1 ]9 ~7 ?
- {1 n0 n4 W# a: m1 u2 Y
- //report error to syslog, Message property on _
3 T, O, t* C# \- R R$ ] - exception object already has human
7 P4 C. h, l0 H8 y' `) i, y - //readable message
" `: j8 f! {% C. R2 o! m' ?$ X - theSession.Logfile().WriteLine("Failed to create _
# z X. } o E+ s - block", + e.getMessage());7 R7 u) |, L" R* |" ?( n7 }
- }
复制代码
7 J G5 Q) @( x/ z& Y" N9 c( _5 \- R& g3 D6 V2 ]- x0 ]: g: f j
: u! k1 M5 b3 |* ?
|
|