|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍# v+ c \' d* {* ?3 X6 c" E
2 j1 A R/ u& `/ T9 e错误处理" Y, T9 X* u' N4 G/ F& p
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:& d, _6 A' I, X6 M9 p( {
(1)无效的参数输入
; {2 I8 L% |: a" m7 h/ E(2)企图创建无效的几何模型
9 a p3 G( M; Y' |2 \(3)不可预料的调用顺序
2 F# i+ c' ^; k(4)得不到的系统资源,比如内存或者文件访问等! f/ K2 T- n% U& G8 |- O* ?0 ? l
所有输出均为最新。 _9 [3 [- C% [6 f# v% {( q# s N
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入 [4 X3 B# l |- m% k9 ?3 h
: b, i' q) X" e
2 错误侦查
7 W- l, s x/ o7 Z通常返回错误状态或者异常。
0 j$ w2 S: f3 b8 s对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
, h* y2 h4 @4 c对于NX Open 通过 Try/CaTCh的架构进行处理
1 h! ]3 K1 g* s& H- a Q- `3 错误报告
0 v; n/ \/ ?4 Z7 C3 F(1)获取错误信息: u* Z( b3 H5 p
错误信息,获取一个错误码,并有一段可读的错误消息7 [8 o) N% v% T3 S, N6 @; }
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理$ V0 S6 l. i( k: F
NXOpen 通过NXExcepion处理2 S" k3 t' \! D3 e
0 r9 U/ ~" D4 B: h2 k (2)建立报告
) B8 O% f; e, y7 h% ? 需要增加信息去报告什么操作导致报错,以及如何处理
* h1 D. R# p7 f- j, l 1 Y* M( C E a" ^1 U- x
(3)报告错误- Q9 M- m0 a1 \- g; q
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
5 Q* {9 z# r3 c2 y4 i! W* G8 v3 q 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。$ V! |' |8 C/ o+ c# K
* _' q0 B) T' X( k L% N2 m* t) y/ }
(4)错误修复! D! J! k0 s; W; O U* f6 Q
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。. ~! u" x+ L2 B! E5 g. o
NXOpen提供的错误修复包括:
9 n# S6 I3 m7 r a.方法定义给于异常处理,让程序员来诊断错误8 w# j) _6 `4 i1 c: J R2 `6 F; s
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态) B7 a" y2 `+ M
c.UDO进行处理,去返回曾经的状态
" s& Q4 }& [9 C X4 W- b' C% e
& m7 Z0 z. C1 T8 c$ i* d- $ l, G; s- E0 p! ^ a
- // ufun 的方法
5 a/ u) B+ [, n! B# O8 C& S -
- r' X6 S8 x( G) J Z" | - int status = UF_MODL_create_block1( UF_NULLSIGN, _
X6 Q. P0 p# i2 O& w% U' e - corner_pts[i], edge_lens, &features[i]);
2 A) y! Q/ \! E - //check for return value+ x1 I6 w4 u7 K9 R
- if (status != 0)
+ g2 W' U2 J# u - {
& E/ L& k! _7 q: v* _+ B - //get the human readable error message" c7 x7 j, f# ^* }1 M
- UF_get_fail_message(status, ugErrorText);
& A G* y( c% s3 i - //report error to the user6 a; _! W* S3 _7 `: T0 i2 Z
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _* R( Y' q z, y% x& h
- &ugErrorText, 1, ..... );' }# }. A% k+ b6 S+ p$ _% _% `
- //report error to syslog9 W6 p- V% J _+ L: C
- UF_print_syslog("Failed to create block\n", false);
' n5 {) t3 r4 ^ - return 1;
' P% W" q. ^) c - }* f: D5 i9 O8 V: C1 ~
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);6 m# a' Q1 c2 e2 U4 \( |/ R( g
- if (status != 0)( q H3 Y% A0 D; K }$ X- J' h
- {
6 @- ~' V% t& s - UF_print_syslog("Failed to get body from block\n", _
4 G( N( d! e. T9 b) v @7 J - false);, d, i5 s# b7 f$ L" Q/ I4 D* F
- return;
: f4 r. F, n7 R6 M1 H6 B+ { - }
+ ~. x* `4 N% k" _0 l/ q' C -
; Q1 T4 C, B2 p% {5 ]! Z' V& |( w - //NXOpen 的方法,以下是java代码
! L% ~! \1 K& `& y - $ T4 n( R) a" T& z6 M! n7 G5 `2 G4 p
- try5 h {4 ^! |$ A7 x5 w
- { c0 E9 x. n+ W a# i
- Session theSession =(Session)SessionFactory.get("Session");
6 `7 f/ g3 Q+ V% s - Part workPart = theSession.parts().work();4 o' A+ j4 `) Q$ o; r; D, u) Q
- nxopen.features.Feature nullFeatures_Feature = null;+ u( l" a8 M+ e" R; m* x
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;6 g/ @8 [* L3 c6 Z4 g
- blockFeatureBuilder1 = workPart.features(). _
# D3 \: N/ J# `) g3 S8 N) J. d - createBlockFeatureBuilder(nullFeatures_Feature);
2 x9 D/ l. M4 D - }) p b @. ^3 J3 Z ^3 n9 K3 X
- catch (Exception e)0 @% T% l! U, ?% t( n. K- r
- {" s6 |. b/ K% h" a0 W0 p
- //report error to syslog, Message property on _
- J+ _) O( I. w9 |- c* ~3 E - exception object already has human& M: S$ R0 c% ^* |
- //readable message4 `( @. T% T# ]9 g% T
- theSession.Logfile().WriteLine("Failed to create _2 g$ a0 u. S8 M \5 V$ L4 q' L
- block", + e.getMessage());6 Z+ d& }9 ?0 M) ^2 X" ]
- }
复制代码
+ F# v" ]! T( {: ^
8 G6 w1 C( S1 b, A; f6 b+ W2 B' ?- r7 E% }7 ~* N" ]
|
|