|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
9 X; Y( S* D, C0 q5 Z( \: W! ~$ @, t, y: u! I
错误处理
' {7 \' {0 E; Q+ S6 N1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) P2 z- s* M# }2 p1 L6 F# u/ K8 v(1)无效的参数输入
; F3 o: S, T8 E. o, | Q(2)企图创建无效的几何模型& a+ ~7 d7 E* |' Z* O7 a4 t
(3)不可预料的调用顺序, V8 M6 L4 ]0 x2 I2 A3 s7 y
(4)得不到的系统资源,比如内存或者文件访问等8 \# s) ?5 ?6 K; r! ^
所有输出均为最新。 X+ q N' l" }8 `
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入: c# v- Y8 l* p. p1 z4 E7 x
' w; I7 C1 H5 j6 l8 v2 错误侦查
, Q/ ^* _5 W( ]( ^2 H+ z通常返回错误状态或者异常。
( B0 y6 i8 Z4 X; \4 E& P对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;( D2 ?. f! n. b$ Y
对于NX Open 通过 Try/CaTCh的架构进行处理
% N3 j, J+ @, e' p# D" T8 C3 错误报告7 M# ^) I8 I' ]' ~) c9 D% U6 o. G
(1)获取错误信息
9 R& B0 S2 d% _. _7 y, N# U+ U" ^错误信息,获取一个错误码,并有一段可读的错误消息/ q1 f) x+ u: T! n1 z1 |+ `
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理( x0 l7 e, Z/ A5 A
NXOpen 通过NXExcepion处理; }0 C, L& E8 h" N: V
5 G) A& p! \4 [& G7 l
(2)建立报告5 m% b6 v8 N3 y% i$ d- k; o" G
需要增加信息去报告什么操作导致报错,以及如何处理9 z+ u# i: u4 e% v2 M' ] T
{/ q) _0 l0 f I! d" S2 {
(3)报告错误
7 |5 \& q4 x& i4 W 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
3 _. ~7 |& s+ K, L& j5 L8 M 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
+ [% ~ u) }: e' f$ |, J0 m & X9 v' s+ l/ O$ Y
(4)错误修复
z9 P9 f- v$ }9 A2 d 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。$ o9 w! O$ K0 v2 ?. {: x% M
NXOpen提供的错误修复包括:
4 R" i# a* |$ W& c( S, f% R) ?& E( n a.方法定义给于异常处理,让程序员来诊断错误$ R1 j# G. ?0 n' N3 z" @
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
1 R( E& \- z& c: o, u: _ c.UDO进行处理,去返回曾经的状态1 X7 m; K7 U, i2 a- p1 {3 [# O
+ ]/ i& U+ W$ z' n$ N. J
$ y! B- ]$ V& u( t- // ufun 的方法9 y& T( a [0 n. S
-
. }5 U0 O( d, _$ F( m1 l% v$ |. } - int status = UF_MODL_create_block1( UF_NULLSIGN, _
% _5 r( m9 _5 U$ S) j* J - corner_pts[i], edge_lens, &features[i]);0 M1 J6 ? h2 _9 L' h; P
- //check for return value
1 j, G- o: A. ] - if (status != 0)
4 I8 [0 p( e' q$ e# a( `0 A/ Q - {2 E( j1 h7 Q' X5 r3 ^
- //get the human readable error message
) F6 p% {; q& \6 w( e) ?/ X% l - UF_get_fail_message(status, ugErrorText);
E. M& r! [2 j" B: V - //report error to the user* `! z( K7 N# }2 m. C1 x
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _ f8 T7 l ]# \; U* Y
- &ugErrorText, 1, ..... );5 j: h$ ^0 c$ ]6 u! |3 W8 O
- //report error to syslog
& V p; N- s w0 M6 G - UF_print_syslog("Failed to create block\n", false);5 F1 ^( o; ~: [
- return 1;
/ {! ]: G6 J8 q4 d - }
9 I" z, d* z9 w9 U - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
# Q$ S! D- d- B; h/ i - if (status != 0)
3 P; i" @1 r$ m* Y# m - {
# d+ t( F f- E$ m |* E" { - UF_print_syslog("Failed to get body from block\n", _+ W7 c) v& I( t, W. N. _
- false);. ?5 p7 N+ @( Z; y/ s
- return;
2 g5 x# v$ {1 c- Q - }% o- o9 l1 n! {5 w6 v; @6 W
-
; {. |8 i- @# e8 D/ }! O2 a - //NXOpen 的方法,以下是java代码& k8 o/ B+ Y0 N
-
u! ]) }8 J3 J. B B) c- @. l3 t - try
1 {- l6 z& t' X' b& @$ I/ v - {9 z5 H r% c* @
- Session theSession =(Session)SessionFactory.get("Session");4 b( K& c+ a t W/ }
- Part workPart = theSession.parts().work();5 m, q$ V1 }* t4 m! i( g8 J
- nxopen.features.Feature nullFeatures_Feature = null;, \- O% L' X4 G2 K7 c9 {1 z
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;" q; n0 b( c% z( f4 X/ W. |
- blockFeatureBuilder1 = workPart.features(). _- K M8 w# S; m- P: ~, T( N
- createBlockFeatureBuilder(nullFeatures_Feature);; p; r) G8 c4 D) l0 H+ R
- }
1 ^; Z5 |2 I; c - catch (Exception e)
* o1 s) l& o: K - {% W* C. c$ a6 W/ w) y& V
- //report error to syslog, Message property on _1 I/ f# ^0 ?- k: n
- exception object already has human( V g' u4 `4 L' |1 L. L* Q6 ]
- //readable message' B# x* r e O O/ v# @7 m% o
- theSession.Logfile().WriteLine("Failed to create _: ~# d. R3 y2 i( k9 C( t
- block", + e.getMessage());
9 R# R0 R- p5 i& A; d6 y c8 o( [ - }
复制代码
" ?, [( B* z: X L# N
$ T/ h! v4 X, J# @' M
. `7 `' e4 m. _' _- Z |
|