|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
+ V9 u+ e) O9 M1 b5 T. w
* B& P: b7 N& Q I$ q+ m# i错误处理
/ P. p- n7 w1 m, ~: [9 {" c x- j1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) p$ @1 V( o" k2 U3 h4 l) `(1)无效的参数输入) h, y; `; z( F0 w, B9 [
(2)企图创建无效的几何模型
3 Z% h. d8 h2 Z) w' S) T* w(3)不可预料的调用顺序$ P9 S% t/ I2 \; [& S
(4)得不到的系统资源,比如内存或者文件访问等' \% g. U0 i1 J
所有输出均为最新。
' H/ X- }) N0 t8 h+ RLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
i; f9 m6 H5 @& O# Z* {% S
* F8 r( @7 A* J1 O1 y l2 错误侦查! m: I: e6 o$ z0 M' V
通常返回错误状态或者异常。+ b# O0 W9 \3 ] P- f1 q9 J
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
" c- A# L1 b8 g3 d+ E* U; v对于NX Open 通过 Try/CaTCh的架构进行处理5 ~ D9 ^- A3 }; w
3 错误报告
# ], F/ b& S7 J4 M/ ~! O2 k5 X) _(1)获取错误信息
' R6 s% d2 [& n- Y# @错误信息,获取一个错误码,并有一段可读的错误消息
: T1 ?& E- P+ Q+ x0 {) D ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
0 F9 C: v% T/ P' z6 u1 f NXOpen 通过NXExcepion处理! [' p$ Z6 f) O3 ~8 A" }
9 M/ m1 X3 e# c" ?/ N$ z (2)建立报告
" E1 r8 H! M- x 需要增加信息去报告什么操作导致报错,以及如何处理- L I( j) T5 r' q$ S1 t
* e" f w# D# B9 b (3)报告错误1 p# w% G4 K, ?: z R
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
+ u! ^5 t% V+ f3 ]1 c r- z2 e$ _ 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。; c! T$ u9 H* x7 Y$ X- D V* `
) {/ w. B4 T1 K/ K O
(4)错误修复2 ?4 Z8 i% y8 ]6 ?
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。* V: Q8 ?" m* u3 ?4 D+ o; Y
NXOpen提供的错误修复包括:
7 k- @$ w" V7 @ s5 h" @5 v. S a.方法定义给于异常处理,让程序员来诊断错误
& o% ]2 @3 I+ W4 M b.当方法错误的时候,可以返回NX回话和part到一个有效的状态! F9 _9 c# e; E1 m$ m
c.UDO进行处理,去返回曾经的状态
, e3 U/ Q: r2 j7 v' j" |$ z/ I" H/ u g$ |1 T6 F0 ^; ?5 I$ d
) { K: x% b: @8 d; Q' r0 k- // ufun 的方法* Y1 W2 c X2 {2 u: [( Q/ p6 w
- ; o6 N) t8 [% c2 t1 ]3 e
- int status = UF_MODL_create_block1( UF_NULLSIGN, _# z6 ^& G3 G) a4 q& O# {
- corner_pts[i], edge_lens, &features[i]);" q* m0 B3 M; y: p$ [
- //check for return value
2 X7 f. p7 A% a( [) R0 ] - if (status != 0)
6 q# D$ j% I& u$ j* x - {( S# B' X1 b q# W
- //get the human readable error message8 V/ X. t2 m& `; c; {/ o. J7 c
- UF_get_fail_message(status, ugErrorText);. l: _( j9 M# N9 F- b4 w! D
- //report error to the user E3 l1 c1 e( N) B4 `9 g, e/ v
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _$ O5 G3 k& `9 }. {; m
- &ugErrorText, 1, ..... );3 g* y, O* ]8 ]5 S% ` R& L" `9 o
- //report error to syslog! J* s0 k' Y h O
- UF_print_syslog("Failed to create block\n", false);
2 t" o; w1 I4 [3 M" ] - return 1;
2 E1 E& D. ^8 g6 Y' w/ ~; R - }
$ d4 f% u% m6 j, g. Y - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);& N$ I2 J5 F' l3 h3 y& F
- if (status != 0)
9 _5 o4 K0 ~# r8 W - {
% Q8 C( S/ |4 K5 N; p - UF_print_syslog("Failed to get body from block\n", _+ r- l9 ^* N& a" c! u; \
- false);. C n1 ~4 ?5 t, B K$ U6 a
- return;: B: d+ ?3 I" G# _% m
- }4 P# Q0 |8 X7 ~7 [
- + f4 Y1 B/ \9 ~4 }( j
- //NXOpen 的方法,以下是java代码$ {( { \! z6 y+ v2 c) e
- - L* U4 r s9 y
- try
3 `% n0 ~# v; e+ y6 f- k( ]5 |" a$ P - {
, e9 C4 C# I( G4 J1 |' R- `$ L - Session theSession =(Session)SessionFactory.get("Session");( Y2 P; z! B3 g1 g0 A
- Part workPart = theSession.parts().work();/ W" W& `, [9 n: ~
- nxopen.features.Feature nullFeatures_Feature = null;+ [) \! N8 ?; m& Z* }6 e. c
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;6 D! a @) R( T( Y( h" |' q
- blockFeatureBuilder1 = workPart.features(). _
- c7 O8 |: B0 H p* y3 |% w0 a - createBlockFeatureBuilder(nullFeatures_Feature);
9 H4 o0 d* {& q - }
2 d2 Q T- b" o4 D4 ?5 m6 G - catch (Exception e); e5 G& i5 `& h6 Y; S
- {
5 o5 k" E* a9 y8 v4 p" ? - //report error to syslog, Message property on _
+ k1 K& I* n1 t- U. |' ^; y' Y. T - exception object already has human
0 j; [- L# m/ Q - //readable message& g2 y$ g; Z, s6 o( {7 I
- theSession.Logfile().WriteLine("Failed to create _/ j# v6 }( Y4 U! u) e; ]+ m5 A2 R; u
- block", + e.getMessage());
) C1 V4 O2 p; j% [. }5 z - }
复制代码 e' t0 w3 W( e3 V1 ?
. G3 @0 V3 R8 a: ?: f
. {7 O+ g' l5 b5 q! H, S |
|