|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍5 l, t4 ^+ V. ^6 E5 i9 I7 O
! d3 Q+ L, l5 w3 l错误处理
9 i# b# p+ |/ p: R" }% c1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:5 C* B n# q$ a! }- r& A
(1)无效的参数输入- L& j j9 x3 [
(2)企图创建无效的几何模型
C8 H7 B- p/ H(3)不可预料的调用顺序; d+ Q: l. w i, H \
(4)得不到的系统资源,比如内存或者文件访问等
) E6 H8 o. ~3 v+ y! V- X" b. F 所有输出均为最新。
! `( P4 N- D$ v! s( N1 i& E! i* WLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入* R( T8 H1 H- s5 M
& L/ }0 G; _ Q$ } Q
2 错误侦查2 \4 D' k# q7 q, |: ]
通常返回错误状态或者异常。, C( L- E! W% D- u. E- X0 B2 ^2 m" Q: n
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;. Y! l7 N" n8 T# O
对于NX Open 通过 Try/CaTCh的架构进行处理
: \/ i2 h' H5 k8 q3 错误报告
8 [0 j6 r5 K3 B1 ^1 @4 }(1)获取错误信息& H! g7 O! A% d C' s! r+ H4 |
错误信息,获取一个错误码,并有一段可读的错误消息
, j4 Y+ Y8 k/ H% N! l ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
+ q# ?2 U1 z1 ? NXOpen 通过NXExcepion处理
5 L3 @8 x' D8 M# c8 i / |! H! |+ F$ M r8 e5 O- E
(2)建立报告
+ E, x% S1 b* ?$ C$ V) n 需要增加信息去报告什么操作导致报错,以及如何处理& b+ N2 `" L$ j- T
3 e* M. m6 k! j" N (3)报告错误
; d7 m# x% k1 y. ^ 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
' t6 F9 q3 {, Q. I0 { 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。& [/ |1 d, Q1 d
% g' `1 N$ }* j: e
(4)错误修复! r4 m+ e2 K) c5 a: ]
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
: ^% U3 T9 U9 N( C NXOpen提供的错误修复包括:
) H$ Y \& g2 y5 E, Y* r a.方法定义给于异常处理,让程序员来诊断错误
" B8 D/ d) j% Z. a b.当方法错误的时候,可以返回NX回话和part到一个有效的状态9 \' j$ P! D6 |, O" ?4 I* n& @ X
c.UDO进行处理,去返回曾经的状态
+ M- K A: w1 e4 |$ z6 J0 A, H* h1 S, u
: B% E; x+ [) A% b- // ufun 的方法 s9 `1 x2 B! B4 i- d
-
8 p; ]9 F6 u/ X" ?2 @3 ] - int status = UF_MODL_create_block1( UF_NULLSIGN, _" U1 q# w7 D) q4 ]2 x
- corner_pts[i], edge_lens, &features[i]);
5 `* [. F+ J0 d: f% A8 p- m/ h - //check for return value# P6 @/ `9 k# G/ Y
- if (status != 0)
" P7 T" \5 h7 g* s - { d- Q) C, @/ o, Q- {
- //get the human readable error message, W1 |( p: n+ \
- UF_get_fail_message(status, ugErrorText);1 [0 h3 M% P& B5 P- g; K- `! S
- //report error to the user. h* W2 l; {7 h, \
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _- [4 b- S9 Z: b! ^' g
- &ugErrorText, 1, ..... );
7 N9 g$ B: E0 Z1 y) [: ]* W L - //report error to syslog8 u" q( J& m$ T) M
- UF_print_syslog("Failed to create block\n", false);, U4 f+ N3 X( K* v
- return 1;
, f6 p" j, U6 l& e3 x* G - }! Q* R: K6 X+ t* C4 j; O
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
% N9 A b2 `- Q+ T8 F6 H( X; H4 \ - if (status != 0)
8 \/ Y0 F( m4 c ]% T: n - {
# ~; T! D' H$ [9 [ - UF_print_syslog("Failed to get body from block\n", _
" J" ?: m) O3 C! E. ]+ O( T8 j - false);
4 R0 S" {7 [" K0 y3 C$ ~, k6 a - return;. D* U2 Z4 z' `! {) \8 j3 \
- }4 R) o9 W2 J; [: {6 ^, @& L
- 7 q+ S5 ?) c( e1 v3 C/ S: V
- //NXOpen 的方法,以下是java代码
. T" ^6 c2 y$ b - 8 q Z& c" ~( O* Y
- try
8 F( H* o, T" a) N+ f1 B - {8 d5 u* E2 D8 ~; i% {; \
- Session theSession =(Session)SessionFactory.get("Session");
0 q- l) ]1 R' d0 I5 K - Part workPart = theSession.parts().work();* z. N& x* ~, S9 i4 E4 r. @3 {
- nxopen.features.Feature nullFeatures_Feature = null;
2 k5 L" U" I$ h% a4 G6 ~' r - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;+ {, U4 W" [: K# Y8 v
- blockFeatureBuilder1 = workPart.features(). _' K4 Y) r5 p1 u$ k9 {
- createBlockFeatureBuilder(nullFeatures_Feature);
) \& \- `# d2 Z' S+ S Z1 C- } - }3 g' t. u- E% A; b
- catch (Exception e)
; x; J/ e0 r/ P8 ~ - {! I$ i c& k9 Q2 _% @
- //report error to syslog, Message property on _
5 v7 w9 ~, I+ D: Z* m, E, c5 G' {3 I - exception object already has human
v( D* R6 d% n9 b$ b - //readable message# h) L3 l0 x1 Z: w3 ?' ]7 X
- theSession.Logfile().WriteLine("Failed to create _! u$ H% M( B7 P
- block", + e.getMessage());, f% G( m- i' M
- }
复制代码 9 V$ h1 z5 d7 z% I9 J) F/ e) n$ F
/ g7 ~. }* G5 a1 {4 C: N/ r' [5 L! x, E9 N/ V$ F
|
|