|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
关于NX 二次开发中,错误异常的处理详细介绍
" L5 E6 I# ` ^% ]! f) G
/ ]/ K2 P3 V, Y, a! B错误处理
: z' d- ^0 I# ~* P1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( V' @, j Q9 p& Y5 C, y
(1)无效的参数输入4 ^) w% G" I) U' T9 J. v6 |" b! f
(2)企图创建无效的几何模型
2 d6 y, K5 H+ A- b& I(3)不可预料的调用顺序% R! W! T0 C$ k
(4)得不到的系统资源,比如内存或者文件访问等
% n. V" C2 { E0 b. O( o 所有输出均为最新。
# a2 {7 l6 w6 F qLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
+ t/ [/ i" k. @/ Z/ x2 s1 {
5 q, T: D! N* n! E/ w: p2 错误侦查1 S) K% c# `- q& H5 \3 {0 y
通常返回错误状态或者异常。3 k, D. [5 J) j* o
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
% \: Y8 T4 ?3 ?" f; l k; p2 k# a( |对于NX Open 通过 Try/CaTCh的架构进行处理5 k& z5 n) a" O+ D
3 错误报告
' @2 P# c( s* t. u- f3 m5 `(1)获取错误信息2 ^$ m* R2 W1 c+ Y+ K' M, P% q6 g
错误信息,获取一个错误码,并有一段可读的错误消息
' w! P, m4 a' e, T* D ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
' K; h: m+ N, j9 J; y NXOpen 通过NXExcepion处理4 _5 N7 b8 C l v
4 l" V! g! [$ u" p
(2)建立报告2 a# C- K0 ?/ ]+ s( O* p* y
需要增加信息去报告什么操作导致报错,以及如何处理
7 O' M) d2 E8 X8 H. i
, o- d4 v: ]# P4 |1 R! ?1 R (3)报告错误
7 d( p+ G/ c" @; G- V 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
( F4 W: E$ ^/ r* Q 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。. z5 F* G2 G# f0 Y- B ?" C5 N
! p3 D$ E! }3 O( d' | (4)错误修复5 {/ Y( {" ^0 ^* L( A; K( {2 k
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。7 X* G% E% E! _
NXOpen提供的错误修复包括:
, a# x% p6 ^8 t( S* R) j# ^) U a.方法定义给于异常处理,让程序员来诊断错误
0 s/ l/ f) n( f b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
, E* C- g1 R7 d8 M8 c3 V c.UDO进行处理,去返回曾经的状态
6 Y' T- y9 W+ R
, }: I7 O1 ~, @7 f. s( o' K- & i5 }. e+ V( D( B3 b) N Z H" Q% k
- // ufun 的方法" z0 l6 @& ~' i: P
-
' K6 [/ }2 H. {1 v6 }0 R) u - int status = UF_MODL_create_block1( UF_NULLSIGN, _+ F2 I3 E4 K, ]* ~- D, O- b
- corner_pts[i], edge_lens, &features[i]);
; ^# m, E; o# f3 J" C$ [! C" X - //check for return value
3 i5 u6 _8 p: ^! _5 U2 ^ - if (status != 0)
; u' A% x" b1 ^8 I9 X - {
. m2 y- p+ @4 z' V - //get the human readable error message
2 H0 J+ e1 u0 C+ j# M2 B5 E - UF_get_fail_message(status, ugErrorText);$ F- n7 a% n" o2 _9 k$ Y7 y4 D
- //report error to the user
& ?/ `7 I# H a, `5 { - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _9 H6 a, c* ?8 y
- &ugErrorText, 1, ..... );6 i/ V8 h7 ~5 c
- //report error to syslog/ a: V" n/ L @
- UF_print_syslog("Failed to create block\n", false);
$ e3 C3 o1 F0 t$ i$ I @) @) f" s - return 1;: D; R$ q4 l! {: V( L1 g( {7 G
- }
R' p. e' w: ^% H- Y - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);( v& N' P/ f! ^: }6 i
- if (status != 0)
9 {: b7 n; ~8 d3 B - {
7 r% v" j: S1 _4 l/ R( y - UF_print_syslog("Failed to get body from block\n", _; t* c/ ]* y* `. H" e# J
- false);: P. j; b" x5 N+ d, H( N7 g
- return;/ ?& Z5 a0 _3 ]. @
- }1 w3 C5 h& J7 U/ S# w a
- 5 [7 N/ ]; O& {. B p' {& D' T
- //NXOpen 的方法,以下是java代码7 S7 c) \" \& z2 p% V6 q$ G
-
U- U& ?2 d# p: g @ - try
" W- W% w7 v" d$ |' J- p# Y/ r, J - {
0 p& O( [; ?; i5 X - Session theSession =(Session)SessionFactory.get("Session");
8 s& T- s e4 d) c9 w- X1 [ - Part workPart = theSession.parts().work();
3 h% u9 C. j4 |7 H3 n G0 q - nxopen.features.Feature nullFeatures_Feature = null;
9 G ^, M9 m1 f i - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
8 Z8 B6 b% x, W( ~ - blockFeatureBuilder1 = workPart.features(). _- y3 Q! R8 |* D' R
- createBlockFeatureBuilder(nullFeatures_Feature);
* k5 Q& V; n. n0 m - }
- b( ?# |8 C6 u; S3 k - catch (Exception e)
$ R5 k- |3 L' V8 O- t - {
5 H" v* s" z$ c- v+ l/ c2 d - //report error to syslog, Message property on _4 B5 h# h, U. R/ K! X' |
- exception object already has human. ]/ U" c8 y! ~5 H/ N
- //readable message
. V$ O. ^7 I2 j. c) {" H# E - theSession.Logfile().WriteLine("Failed to create _
0 F6 Q% e- h9 X+ Y2 L - block", + e.getMessage());+ } w- y" Q Z/ n: T1 J
- }
复制代码
1 A) K3 e( h' u/ l8 l9 Z" k
* S1 T0 A2 J. R! d! T, e* }; u
& R" w6 }# v/ ?6 }6 b1 q8 }! P |
|