|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
- ~# j7 y# ], N. v/ f7 i) H9 Z! L2 ~
, G4 l8 ~+ L3 z错误处理
) N6 s; n+ W: {$ s# H1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
W/ o- U: z+ e* S0 H; e(1)无效的参数输入% i! m5 @" ~1 I l* N) \( }
(2)企图创建无效的几何模型, I1 V3 V j+ d" l1 @* h3 z7 {1 w) G
(3)不可预料的调用顺序
& O) A$ H5 f; W(4)得不到的系统资源,比如内存或者文件访问等% }% r7 B3 m6 v: c# o- O
所有输出均为最新。6 P$ E2 S- G2 p3 H/ O
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 |- A& t& n! ?4 o$ Z+ J+ C) W! W# m
2 错误侦查
* [: Q0 ?$ f! D通常返回错误状态或者异常。) }4 B R0 ]" k7 K u
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
9 q Z3 M5 d4 B对于NX Open 通过 Try/CaTCh的架构进行处理
/ v" U! d x' n; [+ X6 j" E/ p- r E3 错误报告4 \* |5 y" ~, A8 T6 G- J
(1)获取错误信息5 b; C. s" p8 s' m, l$ X
错误信息,获取一个错误码,并有一段可读的错误消息
8 J( o$ }& p' ^# w) h3 Z; g ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理: d+ L8 i; v" A! p; T! [( W
NXOpen 通过NXExcepion处理
: b! A( b3 v) Y& ^1 v 9 r4 C2 a+ j" r! p3 b
(2)建立报告 ^& f% E5 K0 c
需要增加信息去报告什么操作导致报错,以及如何处理
8 E/ _/ g* Y6 C ~/ y * h/ Y9 w$ `; ~* w% g. |
(3)报告错误( R- E/ P: h! Z! B7 b
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
4 {" q7 }& S1 j' o& e 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。7 x; `* q7 D5 H$ {, Z v0 C6 b6 K
; S0 ]# [5 N1 O; ~/ r
(4)错误修复8 \8 K8 t, A% `
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
# L9 {, n8 w- t1 p7 z& j4 v! ` NXOpen提供的错误修复包括:
( ]5 Q) Y' J8 b6 v a.方法定义给于异常处理,让程序员来诊断错误* e3 J/ v0 a- q
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
, {3 g0 I4 [8 I P c.UDO进行处理,去返回曾经的状态
0 K" C; c8 V# \- A5 ]; C
4 w9 X- D! a9 o- y: E7 o2 Q& `
6 G3 q3 x+ B5 o! R6 F V- // ufun 的方法
# E. j! L; J$ |4 `3 V$ l0 W - 9 @; I6 z. u+ e% t2 h) F( e& X
- int status = UF_MODL_create_block1( UF_NULLSIGN, _: g6 P e L4 p$ K% {
- corner_pts[i], edge_lens, &features[i]);) Z L- p+ M, \. B1 O
- //check for return value
" j8 U3 ^6 B, H9 N4 \) t! U( n - if (status != 0)2 g3 V, G9 ]% U
- {
! z: C+ }% N6 A - //get the human readable error message
( u, V8 R4 G" Q# S0 R - UF_get_fail_message(status, ugErrorText);- ]. s. g! b. O5 `
- //report error to the user
/ P9 j! H- \$ V. T$ J% S% o: a; T - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _" a3 J. H3 ?; Y
- &ugErrorText, 1, ..... );+ Q) z3 S1 z0 m: K
- //report error to syslog
! k/ [1 E5 G4 R4 ^1 q4 d: X - UF_print_syslog("Failed to create block\n", false);7 a' R( p) \& ~5 i
- return 1;& H, o# ?6 G2 ~+ C
- }
/ F5 y/ m1 ]8 t1 T - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
, L# }, t4 u' W- A, Y4 _" [ - if (status != 0)/ u- [# n0 O. |+ T1 L
- {
& |# n9 a& t. t2 L1 N - UF_print_syslog("Failed to get body from block\n", _
; R/ Y: c" e( f o P! ~6 k - false);
+ c/ q, C. d6 |: q1 f - return;
+ P+ K% D/ V/ O/ X; l - }
# n& R; b2 j4 T2 I7 V1 t -
; S" h: n4 T+ X - //NXOpen 的方法,以下是java代码
/ o/ N9 w6 G+ {; R" W$ O -
5 l9 A( ^+ ^) ?/ H4 k# B' U' M) B - try7 I" U* B+ _- x6 J( E: k3 n( f
- {# P7 I( a: x5 l) F* ]7 X0 t9 s' N0 o
- Session theSession =(Session)SessionFactory.get("Session");0 e* w/ H. O( _4 X" p; ~( a
- Part workPart = theSession.parts().work();
. a$ | L- D# p - nxopen.features.Feature nullFeatures_Feature = null; V% q6 ]+ ?- P, J4 K
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
) g6 d" A: {8 L9 Y% ?& r: B% ^ - blockFeatureBuilder1 = workPart.features(). _
* j* j6 |6 h- A! `( l - createBlockFeatureBuilder(nullFeatures_Feature);
* K9 u! a5 z- p. b/ I: P+ _ - }3 ?0 F6 t J& w" [* N5 n* D
- catch (Exception e)/ G9 K" ]$ c, p7 J% C1 M8 z" `
- {7 {; s, Y" M( j2 h8 U+ z
- //report error to syslog, Message property on _
, c9 C2 h8 ^& V7 ` - exception object already has human
O+ Z; N1 @* ]3 I, S - //readable message- n2 o3 ~* Z# p7 c& \/ @- d
- theSession.Logfile().WriteLine("Failed to create _$ v- @8 p# u M
- block", + e.getMessage());
' j8 r) _* @: l! Y) x - }
复制代码 3 |* R% b" h% w4 W
" }6 Z! k" P, F! V; t9 f+ G
* \" d) X+ L% b5 A
|
|