|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
8 ^& k; [& o3 E) _# l0 Y0 @7 r( t
错误处理
9 N, @! J5 V4 h' Q; `1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:6 L: a. I7 P5 g6 h9 h. T6 O
(1)无效的参数输入1 P2 g4 s1 z# `9 I" W2 i
(2)企图创建无效的几何模型" r; A, Z3 l. ~8 a
(3)不可预料的调用顺序
* c7 {' \8 c6 z8 Z! _! _$ Q5 Y& h+ S(4)得不到的系统资源,比如内存或者文件访问等
1 Q1 t/ l% Z9 Y$ R% [7 } 所有输出均为最新。
7 o9 [' ^; _1 V, bLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入4 K9 U- i' L1 C; I
+ S* A: w) w/ a; _ C! k- T" w
2 错误侦查
/ g M0 l0 [9 [$ G. y: Y/ }通常返回错误状态或者异常。+ V2 |7 o7 W' P1 E
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
9 O, j* O& l! N对于NX Open 通过 Try/CaTCh的架构进行处理! |% p" s$ ~* B5 o: M6 r
3 错误报告
3 M( P/ f# W0 A/ L: N8 F/ y(1)获取错误信息9 _, N5 c5 |& t% L4 m6 u
错误信息,获取一个错误码,并有一段可读的错误消息
! a. W: A6 ^ L# q" C: c8 _) E ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
( T% C G z" ^3 o# e* s5 d NXOpen 通过NXExcepion处理
; Q v' `6 t! p6 L8 Z3 ^+ f 0 k6 v/ {, D2 T3 F. |
(2)建立报告
9 ]4 P" s W( _- C$ i3 K 需要增加信息去报告什么操作导致报错,以及如何处理& I i6 a4 X6 t( |6 A: `: {6 m
7 W5 p. A# E% i" J o$ T
(3)报告错误
# p, R9 f* m" j0 D; u3 ^8 V 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。; l8 W6 s% P& d% u7 B M
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。7 a2 H8 W, W _( Y1 H* ^
6 l. u1 H1 {5 A (4)错误修复
& M$ ^( o! r2 K- s+ Y6 \ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。' R: r* R& ], N) S! G: y
NXOpen提供的错误修复包括:7 q4 [4 v+ K1 B9 u
a.方法定义给于异常处理,让程序员来诊断错误
* D8 u7 I+ ~5 a b.当方法错误的时候,可以返回NX回话和part到一个有效的状态8 W3 `( n9 U" y- x, _% ]( ~" U
c.UDO进行处理,去返回曾经的状态
! y4 L5 |0 V4 z4 K& y) [; V8 i. P b* T
' J! P P4 z8 X! H* J3 p2 {- 1 e3 h8 N; M' C4 k, t- o7 {
- // ufun 的方法
+ t) ?, v, o h9 T" q) C' Q) X! X$ k - 1 m& Y7 q2 ?4 A6 `; P4 j2 x4 H( r
- int status = UF_MODL_create_block1( UF_NULLSIGN, _ l9 i2 _+ p2 q& f& A1 T/ t$ B
- corner_pts[i], edge_lens, &features[i]);
( b$ K" J+ q T+ I* J# { - //check for return value# l6 I3 R/ F# ?' I% r
- if (status != 0)
, i3 w8 |4 K) N! X( r2 x! m% m - {
a5 _( z9 N# w2 [% v U: j - //get the human readable error message2 g; g# A. ^, n
- UF_get_fail_message(status, ugErrorText);" f! \2 T9 F# `2 u
- //report error to the user6 b1 ?+ J8 `; I/ U$ a2 K+ K
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
2 K" Z" H- ~1 n$ p4 ] - &ugErrorText, 1, ..... ); n+ N. E7 G6 ~5 a; P! W/ C7 @: _
- //report error to syslog
9 W7 C: J/ l; z& ?3 }/ o - UF_print_syslog("Failed to create block\n", false);! }* K' y. y) X/ G
- return 1;
3 e, q9 `7 Z" h3 b - }0 O4 M; ~9 _3 b O9 V
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);3 `1 ]" e4 s. U3 U8 O0 @
- if (status != 0)
0 I1 ], g! T& x9 V* Q7 y - {
1 ?1 z1 r, f' s% G Y; Q& N - UF_print_syslog("Failed to get body from block\n", _
# l3 f& y! ~& i( Q* r - false);+ U8 S. d. Z4 M. y: D
- return;% ]) O1 {- @* z- n/ d! j5 M# ~
- }2 i! O v. H; ^' U7 I" _
-
8 @# Q6 ?8 j. C, k! ` - //NXOpen 的方法,以下是java代码
; E6 `8 x r8 ]0 Z9 O9 X7 a+ K" { - 6 m0 D5 Y$ j5 _5 s) M
- try8 e+ \& d2 R5 g
- {
' Q$ L" J8 R: f7 w9 o8 d, [ - Session theSession =(Session)SessionFactory.get("Session");
% q3 {+ z1 I+ b$ v8 l - Part workPart = theSession.parts().work();
o% I. p/ t) B' w: S1 Y5 } - nxopen.features.Feature nullFeatures_Feature = null;6 H3 u7 A N) {' X* T; k
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
/ E8 C5 ?& @' F - blockFeatureBuilder1 = workPart.features(). _/ Y8 M7 b. G1 f' A
- createBlockFeatureBuilder(nullFeatures_Feature);
# d, f3 E- I: v+ ?" m - }
; {! }$ ?) `' q+ A - catch (Exception e)
4 B: l# m! e% G" B; E& A) J' R, L - {' ^6 p; [+ x8 n6 x& |
- //report error to syslog, Message property on _1 b* Z7 V: m" h7 {: ?
- exception object already has human3 n' G' G2 B+ a9 f+ m
- //readable message
- n4 k6 |5 @8 i& {! O$ I# | - theSession.Logfile().WriteLine("Failed to create _
* l$ _5 L" ?0 K! W1 f - block", + e.getMessage());1 d) E5 n* R+ k1 c7 ^# b1 f
- }
复制代码 3 e0 G i. ^, D+ C6 j
& x) p( T' S1 q) B1 {! f
: @2 w& ?, W/ Q1 a) e; M
|
|