|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍7 G/ c1 D& f7 D0 e5 ^6 a4 w
4 d0 z. G0 V1 @
错误处理
0 S1 O3 ^, w" ?/ U; t( I1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
. k0 ~: k* K' \" S8 \- s: ~) a(1)无效的参数输入
; T0 H! G" [+ E% |1 z8 @, f4 x# m(2)企图创建无效的几何模型
9 K- J9 L9 |! \! k! F8 t( v3 h5 i2 S6 `(3)不可预料的调用顺序( V5 f5 u7 q- e1 Z/ w
(4)得不到的系统资源,比如内存或者文件访问等& D* _9 u: _# W& u+ I+ {
所有输出均为最新。
# _; s9 l* U+ ]( \( YLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入7 j8 {% L& i* c
2 Y. U1 K4 P7 j T0 j' [2 h
2 错误侦查
5 Z5 ]' g: i- O$ \通常返回错误状态或者异常。, w3 t5 }& A# ^6 Z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
- L2 s* @+ i7 X) [对于NX Open 通过 Try/CaTCh的架构进行处理
, L2 b$ a; q* h! z2 P3 错误报告
8 w v0 y% ^7 n8 m% O, i(1)获取错误信息/ {/ m; V" ?8 S
错误信息,获取一个错误码,并有一段可读的错误消息
1 o$ p" s% |& `$ W4 A9 H ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理) f U4 N! b1 ~6 `
NXOpen 通过NXExcepion处理
D6 M# s& {2 s: C0 z( i# w
7 {0 d, ]$ W; _1 p/ U' R" @5 } (2)建立报告
4 I p# y6 N0 }- z7 W: X2 k2 ~ 需要增加信息去报告什么操作导致报错,以及如何处理* D3 G7 _1 A! K. |' Z, n- R
$ B- a; B0 ]3 O: i* j/ k6 D
(3)报告错误
8 f5 z# r( a5 F C2 I+ a( n 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
3 j6 Z1 m: ]. W, ]6 d# z5 N 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
. ^- L2 z9 g, e% {" h 3 t. u& ^+ ~& a; u- g
(4)错误修复 E) k7 N+ k: P3 m
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
/ w" W7 X1 m0 A7 ^! j NXOpen提供的错误修复包括:
: l- ^" I) h' {. _ R/ c9 N q" J a.方法定义给于异常处理,让程序员来诊断错误
2 o: z4 i) {2 ]. x/ q% t Z3 U b.当方法错误的时候,可以返回NX回话和part到一个有效的状态) ?4 N6 L. @0 r
c.UDO进行处理,去返回曾经的状态
* d' }9 J/ s' c: H' M
" o/ Y/ z# J- p2 Q2 w. F- 7 N5 x. j0 x D- Q. K
- // ufun 的方法$ y; z, @/ h2 a" |: f# {7 `7 }. g
-
; | T1 u4 ^! o) N/ q9 D - int status = UF_MODL_create_block1( UF_NULLSIGN, _1 U2 t% Q8 j) m4 D- r7 |
- corner_pts[i], edge_lens, &features[i]);
* F) Y o/ \9 O% p* g' u) k. ` - //check for return value
& W& Q% z( j' b - if (status != 0)
: p! J8 }6 @- y/ h - {
$ r# I. k9 B1 \! m - //get the human readable error message
4 W- X; j7 p8 Y' W - UF_get_fail_message(status, ugErrorText);8 y9 {+ {6 [; H7 ^1 `
- //report error to the user) l( Z! I, E3 u% h
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _, o" I3 ^5 n3 V, L( j. P/ o. s
- &ugErrorText, 1, ..... );6 z# I8 [" v/ I' @+ F' |
- //report error to syslog h# d3 |# g: A% Q* K( r6 x* n# ~
- UF_print_syslog("Failed to create block\n", false);
' N' C9 y' L l/ C' F( I+ o - return 1;+ S9 t* F# y) z3 n( A' `
- }& T: [4 { P( s8 l' ~
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);" c) t% e- G, ]6 c- `+ H
- if (status != 0)
) @8 b7 [! C: Z6 b+ f* f) g - {
. ?( [$ Y# I! g3 b7 N; R! k4 p% i - UF_print_syslog("Failed to get body from block\n", _% T4 C V5 A' \; K( p
- false);$ ^& Q; R4 B" {9 c$ v! R* c2 \
- return;5 Y& ^$ Y8 u/ z
- }0 V+ q6 @, Q; e' h* W9 c7 T
- 6 f2 W1 I0 R V
- //NXOpen 的方法,以下是java代码: d7 I7 d+ ?, ~% L
- 7 Z, l% T, P& s' j4 d4 K
- try
' u4 B. H$ B# [; u3 i1 g$ U - {
7 I# v7 ?' s0 {& z/ @9 M7 A - Session theSession =(Session)SessionFactory.get("Session");# X, L! C6 X% e: n* Y
- Part workPart = theSession.parts().work();
" _+ o2 `$ y( G. N7 E v" c! N4 P - nxopen.features.Feature nullFeatures_Feature = null;
& z9 t8 q/ H! W5 v - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;2 F4 z6 b% x% ?6 c; q6 Q
- blockFeatureBuilder1 = workPart.features(). _$ H: p8 D& T0 g a, a" X2 V0 K/ o# d
- createBlockFeatureBuilder(nullFeatures_Feature);
' U0 g( J5 d J% ?' k7 t6 J - }
6 K+ [& P! i" r' K - catch (Exception e)
6 ]( @/ O. Y2 H- a - {1 i3 C& F' d5 P
- //report error to syslog, Message property on _
5 W2 u- S8 B2 t2 {+ O4 k# H1 j0 { - exception object already has human4 n0 R2 b5 |) B$ [
- //readable message
4 {7 F' L e4 C2 l8 J0 z - theSession.Logfile().WriteLine("Failed to create _
" U; H) V1 j& h2 _5 l; K - block", + e.getMessage());" `4 @! A" C _9 }
- }
复制代码
4 ? L# F' Z: F4 d. [# i5 [7 |2 y) I
3 L6 b7 _+ j6 f6 ~ r6 F$ O3 Q8 G5 M2 }2 A# ] G
|
|