|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
2 W* H4 b3 @1 R! \' U3 J, e' T/ O. y# D# h: q+ h6 R O# e
错误处理- V' }8 w! ?. X5 ?
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
% v% R ?% B3 u; N(1)无效的参数输入
4 I$ N; Y3 f. d9 {( u(2)企图创建无效的几何模型( K4 P/ ?4 `' L h! t) e
(3)不可预料的调用顺序
/ S; t; I1 z; S; S' t(4)得不到的系统资源,比如内存或者文件访问等
& Z+ X6 _) _7 _$ y$ B 所有输出均为最新。
: y/ z3 g/ V3 t- K$ ?LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入! w* |, S* x7 s1 `6 u% N
2 {/ e2 Y( M3 Y+ Z# ]2 a
2 错误侦查
: R3 k! G3 P& t7 Q6 |通常返回错误状态或者异常。
: X2 K" y" b; }3 u2 [: \, v对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;9 R2 g8 R: t2 m! N( Q
对于NX Open 通过 Try/CaTCh的架构进行处理) r; O+ Y, O7 t+ C' h! c2 Q0 }* ^
3 错误报告
' g) m2 w) A+ {8 B(1)获取错误信息
( [4 K6 u8 {) S+ ?# l. |8 O错误信息,获取一个错误码,并有一段可读的错误消息* T7 a$ s$ H) U: `2 u1 O r
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理$ R6 y' Z; k6 i. m/ e
NXOpen 通过NXExcepion处理
) ]2 o+ {1 [( t- s. k+ n, v5 n
& T: }( e: h3 q. m+ X (2)建立报告% y: L3 W; }- }4 ]9 F# c# J1 Z0 q5 e
需要增加信息去报告什么操作导致报错,以及如何处理
T+ R- |' n6 U, e D8 K) Q
! \5 D9 r1 z$ r" R# y) f1 {1 K (3)报告错误
# X; r4 ?6 _2 S6 C! @( j c8 S 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。( ~8 l8 o& c( o, a0 o' D
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
: p# m( a5 x# _" [ ; O; V% j' @: b8 n E
(4)错误修复# s! `/ k$ y# u1 X" _
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
' \3 D6 a y; W3 }" ^3 ^- q NXOpen提供的错误修复包括:" b( L7 E! T* e3 T) x
a.方法定义给于异常处理,让程序员来诊断错误( @: k2 L, t" p `* c* v$ E3 D0 c
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
4 v: p. H$ Z) p& R c.UDO进行处理,去返回曾经的状态
/ }2 S$ f8 y! j \9 ?
7 @( S, f* e/ k- ) e, N. ^: o( ^; }) U
- // ufun 的方法! M: A9 N" B" e; s9 ]5 ^6 J
-
9 K/ L$ H7 l4 a* D - int status = UF_MODL_create_block1( UF_NULLSIGN, _
+ r. H" ?, {# J# P5 C - corner_pts[i], edge_lens, &features[i]);
- A. V O9 l% [; N1 D - //check for return value# v; F2 i' I* O, @
- if (status != 0)
. c8 l7 }/ y7 \; n. Q3 g1 t - {
3 U2 {! j/ {3 G, n) N - //get the human readable error message" E0 h, q& U7 c- A3 b1 }
- UF_get_fail_message(status, ugErrorText);
2 `2 ?; p/ G& ~9 n7 l - //report error to the user
! Y+ V1 h' T" X - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
, q+ b9 }! F+ c( M3 X" \0 P - &ugErrorText, 1, ..... );9 h9 g7 a* V( `% _# H
- //report error to syslog$ R; A. w, z, L* a. J# a
- UF_print_syslog("Failed to create block\n", false);
0 ~/ W; i4 X2 s! r6 d - return 1;
3 u/ }8 j0 O3 x1 ?) g+ R - }
- z7 _9 N5 l6 x1 I0 b2 @6 _ - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
, d' [ ~' j- O* ~6 c) L4 f - if (status != 0)" x( t8 s: W- `
- {4 B: A4 E* ]& r
- UF_print_syslog("Failed to get body from block\n", _
5 E& a6 h/ o, @" d - false);
4 A' r' ]0 Z1 N: n- C: O; q/ ? - return;
) D7 s5 B! f4 b3 g T - }
: h' M q6 [& J0 a" R- v -
|; x3 M: g; N& P8 y% y - //NXOpen 的方法,以下是java代码
8 ?' \9 X; q$ l- ^0 x# F% g' y( B - 3 B' @+ w$ ?2 g2 g7 p6 k# h7 r
- try& T N J6 m3 n, l
- {
; t% Z/ S1 ?8 H$ ~7 ]2 R - Session theSession =(Session)SessionFactory.get("Session");! T; _: [9 C& p4 f8 ]# K. Y
- Part workPart = theSession.parts().work();! x6 Z( U3 D" h% l
- nxopen.features.Feature nullFeatures_Feature = null;
& e O8 P$ f/ K3 t$ { - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
* n0 c- l8 q" k0 W - blockFeatureBuilder1 = workPart.features(). _
/ d% I6 k j* T/ U3 \- j - createBlockFeatureBuilder(nullFeatures_Feature);2 }0 K3 G: q5 B/ `8 p$ P
- }
# ]. ~5 T3 W- c% p" g( o - catch (Exception e)$ ^. `' F& H2 @6 _ d9 L
- {/ [0 J& q& V2 y4 u) m
- //report error to syslog, Message property on _& x( g# F% w& t. l; z3 l* E+ G
- exception object already has human
; @ A4 s* }5 l8 D3 Z - //readable message
9 C. O. `5 o2 R$ k- u) @ - theSession.Logfile().WriteLine("Failed to create _
7 p, v+ m5 R# `! H% x - block", + e.getMessage());5 H' a' v% S8 m7 e" I& A/ g2 W: r/ c
- }
复制代码 2 L) ^3 v& v" B- s
; _ a( `4 a& x. E' i8 `0 q0 ^$ `0 [6 A# U
|
|