|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
/ p" W) P" _( s- S8 D: k8 Z6 e
) g9 }1 O! {6 c; F) l( T/ M* n错误处理+ O" E2 g2 Z7 V6 w
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
1 `* C0 _; |5 I; ?7 ^(1)无效的参数输入
' J* c4 V% k2 E/ u2 H(2)企图创建无效的几何模型, x! C! ^$ I- X* Y a! o
(3)不可预料的调用顺序: o* S$ c, N2 o; b1 K
(4)得不到的系统资源,比如内存或者文件访问等
* V: B# r+ K) u2 w 所有输出均为最新。
$ W0 w a7 @- }; S7 g) ALINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入4 e, K0 k: w* _4 X, g4 m; e
8 v9 R7 ]( ?# y4 z, B
2 错误侦查
1 v5 R3 f" U l: m: F通常返回错误状态或者异常。" ?: Z. \3 g0 f/ z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;* }$ q9 D5 G5 [4 M. h. f' v. V9 V
对于NX Open 通过 Try/CaTCh的架构进行处理" [( j" {: y/ v: h, u0 }' y' Z
3 错误报告0 T* v7 |$ t4 g4 d; u4 p! B
(1)获取错误信息
' s( R$ k; G% a- e错误信息,获取一个错误码,并有一段可读的错误消息8 \" @3 Z$ }% @9 y( \ R
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理6 a0 I1 V) g6 V0 X
NXOpen 通过NXExcepion处理
. [/ p9 R3 U0 }" c
! k2 R" g9 b; R (2)建立报告
( R+ {' [' E. c6 b, V 需要增加信息去报告什么操作导致报错,以及如何处理
( i5 {$ M* ?# I* K8 W* w2 ` 8 t" M8 ~, I) \6 V
(3)报告错误: A7 O' R! A3 V
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
# T4 D, d {6 w( Z2 k @; R8 A 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。2 E' C% U# U4 U/ [' d
" g8 L% e7 v6 l1 M9 E5 E( M
(4)错误修复; I; o0 {) k6 r3 f, [' D) H
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。6 g; h4 A# ~7 O
NXOpen提供的错误修复包括:* }+ J$ x6 T& K% F4 M. s+ g
a.方法定义给于异常处理,让程序员来诊断错误
2 U# [% z o; F$ z5 O8 }! J V# k b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
7 m7 c% O6 J, f* u2 V0 f c.UDO进行处理,去返回曾经的状态
, h2 w$ [9 E( g
8 z, \# p, `. x- S
: e' x1 F: w) I1 x; \3 J- // ufun 的方法
1 p) K; T! D+ [% ^! S) J) ~ -
, I5 k" V6 `8 R/ n" D8 n7 X4 V) ] - int status = UF_MODL_create_block1( UF_NULLSIGN, _- E& _$ d- O, v
- corner_pts[i], edge_lens, &features[i]);
' h: @ q- Q$ ?0 ?; I. R - //check for return value
# ~- b6 c- u8 U4 r& ~ - if (status != 0)
7 K; J; @3 y8 \, e( O9 f8 V& i! A - {' C' {) X# G( }0 [# Z- N6 }
- //get the human readable error message! @7 {, j$ s1 ~/ l3 H% i1 g5 s0 N
- UF_get_fail_message(status, ugErrorText);) w$ V( V. ]2 b4 L0 T! J1 l" p5 t) q3 v+ a
- //report error to the user
# O* U1 f2 a O' T6 m, D3 P$ { - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
+ A% g7 |& y) u - &ugErrorText, 1, ..... );) C* K, Y$ }/ Y) P6 B- M V
- //report error to syslog
4 U0 R5 J9 |+ z' U! \ - UF_print_syslog("Failed to create block\n", false);
; [3 O. s9 S0 k4 Z4 G, Y- s2 X - return 1;
3 g) e, _ W2 E _3 K6 m - }
% I( e$ P( S7 P4 _0 S9 N - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);9 W5 V3 `; ^* G$ l, r
- if (status != 0)& _1 e* B" x& s
- {% D$ v. i% U, {1 Y# m+ w0 D
- UF_print_syslog("Failed to get body from block\n", _
8 W& {* l9 f, v - false);
6 l: l- d6 Z2 O% k N$ K i9 v, Z! I - return;, O2 s" } ]2 R& Y ?, |
- }; k) \: G/ `+ e: |. C* T9 F
- " ?9 E( H8 Q5 K1 X3 e5 I
- //NXOpen 的方法,以下是java代码' `& Z8 J' |5 {" R1 X
-
, e! ^; ]! g; i1 q5 c% t - try8 m1 t; v: x& f
- {
: x/ G8 Y, j$ ]0 ^5 X/ M - Session theSession =(Session)SessionFactory.get("Session");
' S0 I- ?% r" P) G4 ^5 ^3 D - Part workPart = theSession.parts().work();
, A0 } W+ P! x; t# H! \" \ - nxopen.features.Feature nullFeatures_Feature = null;" F9 j0 `( k% \6 U4 s- X
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;9 ]( |$ E) O- Z; r9 T+ k p
- blockFeatureBuilder1 = workPart.features(). _
- z4 `% ]/ z4 E' M+ `6 Z$ o% s - createBlockFeatureBuilder(nullFeatures_Feature);% W% r7 C6 y2 k$ L3 y
- }) ]! o* q4 Y$ K5 u
- catch (Exception e)! |7 u, N" Z4 {5 r' z2 e) ~
- {
' `, m4 X w, q - //report error to syslog, Message property on _
# ` `0 P, Z% \+ I - exception object already has human1 T+ A7 v" C) X2 C
- //readable message
2 z4 m( n8 ]# F9 r" Z - theSession.Logfile().WriteLine("Failed to create _
e5 r! l( C- o' n1 D+ C; \ y - block", + e.getMessage());
0 ]+ H" U. T+ }( W6 J5 S - }
复制代码 ! Y* J4 j8 F0 g- `
5 c+ c& \+ S# P# x% w/ f% q! ^2 U/ E, n1 e5 A; }
|
|