|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
: f' l2 a$ j0 B. K% c9 P
2 Y. }1 F3 j& B5 e+ q% ? @6 ?错误处理. N; e, O# \8 w% i! n
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
9 E: k7 ?. {/ r+ H. Y. R- y(1)无效的参数输入+ ~4 \" Q( F% c$ l) ^$ D& d6 J
(2)企图创建无效的几何模型
1 f* {6 d* m& q2 U% h(3)不可预料的调用顺序4 x7 e0 E* X- U: |& ]2 A9 Z9 T+ s1 C8 g
(4)得不到的系统资源,比如内存或者文件访问等$ L# {8 e9 ?* d/ z# l
所有输出均为最新。
7 u8 D$ G# l" ~* u# \LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入$ N4 L' u$ _/ O" v6 E; W- N0 ]- ~% ~/ O
, f- q1 a: @" x0 T2 错误侦查
+ w7 A9 D# t+ {% t* l通常返回错误状态或者异常。
6 t- Z3 N" Z- d7 N5 S对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;" h. a% ], v! t! W
对于NX Open 通过 Try/CaTCh的架构进行处理1 A$ k9 f9 Y& X6 n% z$ r
3 错误报告
5 q& @( s& s/ x6 }- k7 y6 v6 H(1)获取错误信息7 y0 [$ o4 {3 e1 e0 E# m) f
错误信息,获取一个错误码,并有一段可读的错误消息& P6 g: `* M5 c/ }8 l
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
4 Z' O- H) V5 {; }& R NXOpen 通过NXExcepion处理
7 Z& ?0 ?/ V" `. d
, c) L2 z4 F! z4 ~; _2 c (2)建立报告
8 B2 K, y$ G! ? 需要增加信息去报告什么操作导致报错,以及如何处理
4 C& V1 |, Y) Z 8 ?$ G7 S' z; l7 Q
(3)报告错误
0 p! b: N f) F; L, o 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。6 Q* b) }! ^1 H. V! r
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。 o; F( f0 |( ~* _
# r: [0 J# ~ U2 t7 }- L! }) V (4)错误修复
; r4 @$ I% k# ^8 R; ~ k2 V, M: E 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
z6 Q( i0 W7 r7 ?7 M; ~ NXOpen提供的错误修复包括:3 x- l' A$ W5 _% t( Q. }
a.方法定义给于异常处理,让程序员来诊断错误7 ^4 ~$ V, P) v( `
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态1 Z$ Z/ e/ z+ B: d4 b) U
c.UDO进行处理,去返回曾经的状态
+ d4 S# X4 [/ y
$ _- O) q) q; l3 ~
- \/ V/ ?! j3 [- // ufun 的方法
9 T, q! {7 l, ~% I, G' c; Y -
X, Y2 ]/ r: w$ z: i( ? - int status = UF_MODL_create_block1( UF_NULLSIGN, _
9 h! P1 ^8 v" R0 x% T7 @- Q - corner_pts[i], edge_lens, &features[i]);
7 w5 _1 \8 P, L" [: U9 \ - //check for return value
9 l# k& D4 \! r; w% s7 p - if (status != 0)
) o+ b& U' {# q - {$ `$ x2 b& Q$ u3 u6 \
- //get the human readable error message" c+ l4 M: v+ ], O5 e, K
- UF_get_fail_message(status, ugErrorText); I! E& A' O8 T; E/ u5 d
- //report error to the user
N/ h' R; A: ^0 f3 B - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _' \6 }6 y; _! ?3 _
- &ugErrorText, 1, ..... );0 A' p1 B( c" s' q" ~6 j
- //report error to syslog/ A# p. q. k6 G" b( V1 H# |
- UF_print_syslog("Failed to create block\n", false);7 h, U9 }. U+ M8 |5 C: E/ @ t
- return 1;: j: h0 x. j# m" H5 O: B& |% v% h# J
- }+ L* t; O4 O+ }( S
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
4 q2 | ~: K* y9 x; Z - if (status != 0)4 S) `$ x" ?' T" r% h
- {: o5 I/ I! y. j* g' x e1 I$ `5 k. W8 c8 e
- UF_print_syslog("Failed to get body from block\n", _
@& D$ y9 M) v - false);
* g4 c W6 i8 j0 t* A2 G - return;
/ P- }; B% V2 ] - }5 M( ]3 ?: q* l3 Y7 e
- ; v2 B4 W/ Y5 L+ x
- //NXOpen 的方法,以下是java代码
7 j3 G, r# N# v6 x7 |; _ - 8 e! X, l, Y6 V7 k. @+ p8 c
- try
1 Z4 e) f3 ?; o6 j) C2 n - {0 }4 e! e# ]4 a0 ]' V% J
- Session theSession =(Session)SessionFactory.get("Session");5 |+ F, t" B+ @( z
- Part workPart = theSession.parts().work();8 T5 N' q- [ A$ R% M# i
- nxopen.features.Feature nullFeatures_Feature = null;. g( P+ ?) d9 v% s. A: M$ M4 t
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;. U0 R* K: X2 z. A0 w6 N4 _; c- F
- blockFeatureBuilder1 = workPart.features(). _
7 i9 W; w+ e4 i" G8 L5 s - createBlockFeatureBuilder(nullFeatures_Feature);
1 ?5 O) N1 U; R4 R1 I* E - }. N7 @5 Z' M& H) m5 C, q* [
- catch (Exception e)! z' ` G l+ b* ?8 A5 j, |
- {
: K# w% N# u( P }( \ - //report error to syslog, Message property on _3 h+ \5 h0 q' a& k
- exception object already has human
C) P* d; J' y/ m - //readable message
$ u- L. I3 e. S& J6 @! c5 ^' Y( E( q - theSession.Logfile().WriteLine("Failed to create _
# W. y9 R3 p" Y/ n6 k- M - block", + e.getMessage());
% p* P# d4 Q( h - }
复制代码 9 p" l! m$ h" o+ {; W
7 d" {+ O( j% d) {9 p
6 h, {% Q/ `* {8 t" M: i! H! S& v! _ |
|