|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
3 F- L4 a2 X' }$ C7 p
8 @% Y5 i2 M3 b8 V. g& @% _( b错误处理2 m( ?7 H2 E- _: k: W: Y O- z! z- a7 g
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
9 B: O% Q$ j$ D% M(1)无效的参数输入1 r, f* b! M1 i/ K5 L. E
(2)企图创建无效的几何模型4 w8 D" x- L+ X5 K5 K
(3)不可预料的调用顺序
4 m( W1 b, h$ S0 b(4)得不到的系统资源,比如内存或者文件访问等
3 H" W! P( Q* `7 f' g 所有输出均为最新。
7 X: s" I: ~, bLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入 Z# Z) M4 k2 U, P7 r( h
# l, J, D. w( |/ ?2 错误侦查0 h% f' n/ m1 B( I
通常返回错误状态或者异常。) _) M9 e h0 a3 P$ O7 }
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
5 g+ Z0 p5 N5 V# M% D& H" V. M3 \对于NX Open 通过 Try/CaTCh的架构进行处理
# E# Y0 \8 p" }8 F% f3 错误报告
5 v7 A2 \& ~* U; R5 N$ y(1)获取错误信息! f. ^7 P( D" _9 f" {$ B* S9 X
错误信息,获取一个错误码,并有一段可读的错误消息3 \6 P; @, a4 N1 w1 v
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理. e5 P+ o7 w5 K2 d
NXOpen 通过NXExcepion处理
7 t/ A. A( c' `$ `' d# | 1 A+ w) M1 X# K4 w: B- Z; J; r
(2)建立报告: e# W1 S: N' `0 Y1 S
需要增加信息去报告什么操作导致报错,以及如何处理
; w' k' d/ e: } # H/ D: M, e4 x9 v
(3)报告错误6 {" _# Y7 z* w0 n+ r, m% l
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
" Q9 a% G: Q3 z 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。% K; g, h4 p" T/ J% u* @ v S& X; m
6 Y: U$ y4 O" l' k: Q (4)错误修复
" d3 ]! g- P! h" e, d5 [ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。$ u9 q0 N3 H5 V( N, O+ ?& V
NXOpen提供的错误修复包括:& D7 Q+ I0 Q4 ^, O8 s! d
a.方法定义给于异常处理,让程序员来诊断错误
& N' @ w% O! e! N0 c b.当方法错误的时候,可以返回NX回话和part到一个有效的状态7 } x/ g# p u) o
c.UDO进行处理,去返回曾经的状态# s" X: F" f, j% E h$ r0 V
7 X! [. M) |% h' z. x* q" d% Q; Z
- 0 Y' m: e6 h7 I. h+ n8 G
- // ufun 的方法
8 M3 N, \: d6 F" ? -
1 q; S0 p1 H1 E9 u4 v - int status = UF_MODL_create_block1( UF_NULLSIGN, _8 {6 j1 U- s3 }) ~ V
- corner_pts[i], edge_lens, &features[i]);
4 o% ^, B% g# N5 m. p/ I0 E - //check for return value9 W* c( K" Y+ f% L4 u0 l8 U
- if (status != 0)
* `1 [% ~4 ^6 ?) @- E. T; T$ Z E - {
- R- T( o2 p$ @ - //get the human readable error message
" m4 v( W5 }/ W& |1 _2 E2 j - UF_get_fail_message(status, ugErrorText);
, F4 C- O9 Q7 ], c) T+ y* N - //report error to the user
; {- }: \. w9 k3 S - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
% l) i$ @2 n/ G - &ugErrorText, 1, ..... );
g/ T% D8 k# M' D- @ - //report error to syslog
6 T9 O9 b1 a+ }# f! Q - UF_print_syslog("Failed to create block\n", false);" F9 V" U5 a9 ~4 w
- return 1;; |7 L9 f% ~- {5 @) m5 W
- }6 d3 M3 r6 J- l# z" K/ x
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);% t4 [" v" G0 p* w( p+ E
- if (status != 0)* g/ P" C5 }7 |0 {1 x2 Q9 Z3 S
- {8 {9 P F0 O9 K/ R8 b- f! R9 L
- UF_print_syslog("Failed to get body from block\n", _- b- n' X1 S5 u6 n
- false);
* v% G; N" G; e* V m! {. t7 J% M - return;& ~' s* g7 j4 r' q/ }4 E
- }1 `; e4 U& Z9 V' }* c
-
( d+ T, D8 | I5 R. j ^ x z0 C - //NXOpen 的方法,以下是java代码
2 B/ j' b- Q( {4 a! O* i" G# z - 6 F7 d" H5 E+ R5 t) S: G8 O" I
- try
! T" V; ]: h+ ~ - {
. c: _6 {7 j4 h1 j. I - Session theSession =(Session)SessionFactory.get("Session");7 U% H% p5 b1 T9 e
- Part workPart = theSession.parts().work();5 d: U1 _1 f0 L" a' H3 F# Z1 o3 g
- nxopen.features.Feature nullFeatures_Feature = null;
) J r" \4 f! P4 X& p( K1 P/ T' w; t - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;/ t3 T$ k0 [- [# |, H; q
- blockFeatureBuilder1 = workPart.features(). _
( a! x8 S2 k# v* a - createBlockFeatureBuilder(nullFeatures_Feature);
5 D, R- ^ i# [# z - }
: a2 q1 Y4 t! N - catch (Exception e)
. f) ~+ g$ g, D9 k& h0 y - {' z' b2 a7 J4 F3 t8 u" ]
- //report error to syslog, Message property on _
$ q" q$ @' x' @8 h. x$ B# X - exception object already has human* p* P( c0 u4 j5 ^* L
- //readable message
7 I) Y/ I0 H/ z9 b! ]- a" g) a7 l - theSession.Logfile().WriteLine("Failed to create _
7 n/ c* s* Z0 a2 I: {+ x - block", + e.getMessage());
% B0 ?# W2 }, n: O - }
复制代码
. N3 S8 O, l& _7 G0 c6 z0 q3 z! N1 M6 E: c5 z
( ?- ~" f# a# @% d- G0 Y b( d" a |
|