|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍! O( k/ ?4 }4 g
2 a! R8 A: x. N u) g4 P$ u错误处理
) [ b4 o/ I B+ M4 ~1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:) `5 g. C' _8 M% m
(1)无效的参数输入1 O. |$ C, @2 C* ]- i
(2)企图创建无效的几何模型1 R. E( ]' b9 |( o- n! S. z M
(3)不可预料的调用顺序
9 o9 `) \5 I& p/ h- k(4)得不到的系统资源,比如内存或者文件访问等3 \1 m' t/ A: j+ I% l B
所有输出均为最新。
, ~2 ?4 @8 p) I9 ELINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
% k4 t$ z1 k- z8 E, y6 s
) Y/ G7 i) v# U$ X5 A3 I- F2 错误侦查
$ |9 x0 x. `" K2 N! J. G0 O通常返回错误状态或者异常。+ ~" B0 B: W; o
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
2 @* r3 E! |! B$ i对于NX Open 通过 Try/CaTCh的架构进行处理
* i" ^$ B3 k( X$ S. d! Z3 错误报告- R9 v" Z, v$ U( u- j
(1)获取错误信息
7 e, X) P, {4 I3 M$ G错误信息,获取一个错误码,并有一段可读的错误消息
( a" C4 ]1 B1 Q: J ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理& T4 {" Z7 {4 A: ?3 D$ }
NXOpen 通过NXExcepion处理
0 U3 Q% j$ C- t* O* V
( }+ l1 g* Q% B# C (2)建立报告) {- |# P5 {4 p% ~3 T$ C
需要增加信息去报告什么操作导致报错,以及如何处理7 W, T! F/ I! d
: v, J. R' x. y (3)报告错误
9 X( D0 A" t+ ~: } 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。7 Y" P6 e) \1 D/ Z) K
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
, e3 y7 S7 m. S ?
7 R2 x" V# s+ f: a8 I C3 F (4)错误修复6 \6 i" x U; _ J, I ]0 b
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。' ?; z( L% I1 G
NXOpen提供的错误修复包括:
! B8 _1 @, p" w# X$ A3 L8 ~ S9 ` a.方法定义给于异常处理,让程序员来诊断错误# x* V5 P' O# b# l" A) L
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态0 c- }% R3 [5 L5 z
c.UDO进行处理,去返回曾经的状态
, q( O% b4 ^% h
E g& k3 y4 \4 l- f% T6 Y) i- 2 G/ v# B# ^; `
- // ufun 的方法/ R/ l$ K7 M1 L2 z+ Z$ J
-
, z; p. h: Q0 |% \ - int status = UF_MODL_create_block1( UF_NULLSIGN, _3 L' C5 @, y5 }7 t3 R$ R9 M
- corner_pts[i], edge_lens, &features[i]);
4 Q/ X; \4 F$ _- s" X1 P* J8 ? - //check for return value- S1 K0 e' h2 G4 U) V( r* b" q
- if (status != 0)
: x6 l F7 V/ r - {
3 _) v8 a0 P) A5 m. G. l% D# M - //get the human readable error message
/ a, t/ i& y3 U8 i6 c& N - UF_get_fail_message(status, ugErrorText);% ?$ \6 ]; K: R1 A" [
- //report error to the user
. _, O7 E8 G z- S - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _% ?9 R- P: l% @' ^- U1 ^
- &ugErrorText, 1, ..... );
2 Z6 m8 P9 {1 z7 F6 q. U - //report error to syslog7 u5 d, A- E" n n
- UF_print_syslog("Failed to create block\n", false);
6 z) S N$ C1 L, E5 b8 D. {' K - return 1;& q6 s: d/ w" _8 p7 ?! a
- }' b' K1 J& ]4 ], x0 ~$ q
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);$ ]/ R3 q1 v" _2 @" Y3 s
- if (status != 0)
$ r; V+ C6 g- [! _ - {
2 h. N/ z4 x. D% i1 ^- T - UF_print_syslog("Failed to get body from block\n", _ y5 }- \2 q T6 ?: Y& e y; K
- false);
% ]# k& h6 r/ U* `. ? - return;8 j( A; U4 x, [& |+ z
- }# D2 j8 G: @; k/ v. @4 V1 x
- 5 U Q8 a% l y9 @* t9 I
- //NXOpen 的方法,以下是java代码# Y6 p% s4 L8 d0 g4 k4 B
- - }- k7 o! c. o9 x9 m( a
- try
+ s& w: K; J9 I8 Z1 O9 t - {" `/ G0 j( m% U
- Session theSession =(Session)SessionFactory.get("Session");% S& P- E2 o; A- j4 d/ f% h# u
- Part workPart = theSession.parts().work();1 |4 F5 @: S' l; {. ?6 d- [: I. X
- nxopen.features.Feature nullFeatures_Feature = null;
7 L* a* c$ d# l7 ]! F/ o! }7 h - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;4 U$ G G; c- p" w) p! l$ B
- blockFeatureBuilder1 = workPart.features(). _
: m$ ~! F- j! {2 v, Z- w9 }9 l; k - createBlockFeatureBuilder(nullFeatures_Feature);- w; L5 [0 k5 `1 z8 J3 Q
- }
7 x3 @( h" d' ^; h - catch (Exception e)
7 x# X5 E6 k w9 n - {
$ t$ Y% h1 ^' r4 n) x1 b' _ - //report error to syslog, Message property on _* f# f( C* \! i# e# J: j
- exception object already has human
. D9 r8 n" O7 l; [ - //readable message
4 J: \; e9 m% s) P; S - theSession.Logfile().WriteLine("Failed to create _! p* `- y# t, b- N
- block", + e.getMessage());
9 I. G; [$ E- e' x - }
复制代码
1 R; ?/ P' T1 e$ ~9 o% I6 s$ Y
+ b4 H. R. h& N, v
" G! f, I% C$ [8 h: s x |
|