|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍9 t2 E2 c* V5 l7 d* r8 ?
. Q& u4 Y7 i0 E' ^" h& ]
错误处理* V' a K5 n8 T
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
6 R( c6 n( }* p- _7 i9 f(1)无效的参数输入4 Z7 `4 }' r/ H0 l% X& b' Z$ Q
(2)企图创建无效的几何模型) K0 L6 Q) ?3 ` y3 R
(3)不可预料的调用顺序" \8 I5 S) d3 u) @8 {8 I% M& m. I5 x
(4)得不到的系统资源,比如内存或者文件访问等0 k( A5 {: Z( k1 O! \( B
所有输出均为最新。+ k7 l9 x/ d0 {+ h+ U* T
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入' G P+ m5 t, U' A3 b2 i
& ~( K: d$ p# @+ e5 ?; d2 错误侦查" o; B" t& T! `; ^' a; o* E
通常返回错误状态或者异常。% ?; h# k1 }' ^4 z& E, S+ |, G
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
5 d0 B* P8 U* {; s+ Z7 ?: T* g. \对于NX Open 通过 Try/CaTCh的架构进行处理( L8 E/ Y' [4 Q9 A# q
3 错误报告
6 Z. j/ J {& `4 Q3 u3 ?3 [) R(1)获取错误信息. X s" w4 `+ X& M$ {4 @; Q
错误信息,获取一个错误码,并有一段可读的错误消息+ ~+ F8 O: D$ x4 q, c
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理" |+ I9 j. Q- H' ?0 r/ f
NXOpen 通过NXExcepion处理
" y( l0 }. r. P
+ ~2 \0 c2 `; c7 O3 S; ~0 o8 c (2)建立报告7 C# ^6 L2 i' B# R" \% `; R9 F; o: q1 x
需要增加信息去报告什么操作导致报错,以及如何处理
, [: L# [9 P6 l0 U3 U4 c 9 R8 z _* X! q7 T
(3)报告错误- `7 U5 g- O- b1 I
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。0 ^$ m) Q3 N" G0 _, G! e/ v
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。0 T/ P4 _8 \$ `; w5 T+ N
+ @2 U8 o B5 s8 u$ l
(4)错误修复
, G( d0 H7 X2 f9 R8 U 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。( T3 S& X$ e$ |3 M
NXOpen提供的错误修复包括:
$ y6 t8 E, z7 H4 a* f1 K& y* | a.方法定义给于异常处理,让程序员来诊断错误& H, U) Y% f. t/ s) Z. Z
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态/ [+ q! V$ e+ S7 E. ~
c.UDO进行处理,去返回曾经的状态
3 w* [( n# A* Y3 a V! _2 z. c
- d% j1 m7 t6 ~5 v1 w- 9 D- U/ `# S5 g4 w: S7 j- ^
- // ufun 的方法3 K9 V3 w3 O7 V: x& j
-
$ Z- F2 P" c# X2 c - int status = UF_MODL_create_block1( UF_NULLSIGN, _- B* Z7 g) A! O
- corner_pts[i], edge_lens, &features[i]);
1 D: i- m1 w: g4 ?& z - //check for return value
6 B: ^# R4 F* F3 p8 p - if (status != 0)/ b2 u9 Z1 {) k
- {0 C' J. |& x; Y3 d/ ^
- //get the human readable error message
% Y9 S; Z4 B0 Z - UF_get_fail_message(status, ugErrorText);
' r8 P" R& e: k( { - //report error to the user3 G: y0 D+ R* A/ @
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
3 i5 k2 j$ W0 y$ ]. } - &ugErrorText, 1, ..... );
, x9 T$ e" L% x+ U* \; h - //report error to syslog
; L3 A/ b9 ~, i% E1 F - UF_print_syslog("Failed to create block\n", false);: B/ g$ s0 ]. e7 \* m
- return 1;7 k/ j( n: u3 L+ a; H1 S
- }% ]- [& i- m' V
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
6 @8 z7 d3 A1 _ - if (status != 0)
7 b# @# ? l: u# `% h4 b; r - {2 U$ T" Z/ Y/ }* N- Q
- UF_print_syslog("Failed to get body from block\n", _0 M2 ^# v6 E3 f8 `) h9 N1 L/ J
- false);
) X% W" y- A$ B0 X2 E7 x - return;4 Z% t: H$ v- E/ O% J. y6 Q
- }" d# V5 N/ t7 ]! i9 e
- * t, b4 p. W) o& E
- //NXOpen 的方法,以下是java代码
! {2 O% T, `' _+ ~8 o% D8 s* T - % T! f2 u0 ~' j/ ]5 Q1 \ i( ]! f
- try
7 s2 J6 c& N# h% x4 f. s5 Q - {
* y& q4 f9 g& }$ Z( u* Y( R" _ - Session theSession =(Session)SessionFactory.get("Session");
4 U" w5 C$ C' W9 D - Part workPart = theSession.parts().work();4 k9 j4 O M/ d$ s1 W' l
- nxopen.features.Feature nullFeatures_Feature = null;8 {" y8 c2 r2 H9 y4 Z3 k& M+ N+ _
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;9 [! E' I, P- @7 i* F9 [5 t
- blockFeatureBuilder1 = workPart.features(). _
/ x! c6 [( v7 N* ~% a0 s( v4 F+ I - createBlockFeatureBuilder(nullFeatures_Feature);( X; K' l1 l% ]. R# Z
- }4 l+ p E1 O C: i. M
- catch (Exception e). f5 {8 ?% K, ]' V J
- {8 \6 p" [& F3 k+ W0 J
- //report error to syslog, Message property on _
/ Y0 n7 w3 R, f - exception object already has human; \% K) X9 V/ w w5 m; o7 o
- //readable message3 v6 j6 U& s7 }3 Z. j8 l
- theSession.Logfile().WriteLine("Failed to create _
! O: k# N; b2 d/ q3 g+ O - block", + e.getMessage());1 B! T" H1 ?2 f0 d, d
- }
复制代码 . |5 b: D4 K% [0 E8 \3 N
8 R" }0 p7 l7 Z+ y; e
5 Z: x3 S; w7 Y8 Y$ e7 v0 _ |
|