|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍+ S3 Q% Y* l; m! ?/ {
7 e/ b. z7 O* J& F- r1 C$ T! q错误处理0 z9 G/ C# [! V8 F( Z: {& N6 z
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
) l- i- p0 X: z+ @, H/ ?& R( o# ](1)无效的参数输入
( ~2 G6 F- d: E! g4 L0 o! G(2)企图创建无效的几何模型; d; t& W) s) t* N# g t, T
(3)不可预料的调用顺序
b4 y. u) a6 _' e r1 M- w3 N; J(4)得不到的系统资源,比如内存或者文件访问等
- z: H2 C0 A9 n1 y, w 所有输出均为最新。- Y0 T! T6 ^. y6 u; d C9 u! Q
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入 x; E" {4 R3 x0 _
, d: H7 l* Y7 a0 P9 M) L8 z- f
2 错误侦查
( v: o$ |* K$ A通常返回错误状态或者异常。4 R2 V' I7 {/ O/ l
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
1 A, ]( @5 }8 C对于NX Open 通过 Try/CaTCh的架构进行处理8 b5 d# m7 m' ~. C0 B3 v* h/ n. d
3 错误报告
( \/ \. ?) }! ~% \' ?. O/ t* ~' x(1)获取错误信息
) W% r$ W* v/ N1 b1 W错误信息,获取一个错误码,并有一段可读的错误消息
" Y- x; U, @( S) ~9 s# {- C ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
( F( k5 t5 y8 T# G* e: l NXOpen 通过NXExcepion处理
9 m g- L' U x/ S8 w ' W! y" x! a& S9 u
(2)建立报告
# ~6 G' q6 x& C3 S! s3 B: B- Q9 P 需要增加信息去报告什么操作导致报错,以及如何处理
: D6 _0 G- a1 |8 Z6 b' ] " i8 t1 U4 g! T0 L- l
(3)报告错误, Q J( Y# \/ m- q8 c6 t
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
F. P8 C: E1 q4 z9 d; K 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
8 w: u# l1 e; }" w( O ^1 U; x4 k
. |5 v& P. P# ^; g* `3 P (4)错误修复
$ \$ N' @6 a* x$ e P3 ]2 V: {# ~ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
+ g' C- p8 m6 U9 o! } NXOpen提供的错误修复包括:' ]$ [$ `; _ f; I& D$ _9 U
a.方法定义给于异常处理,让程序员来诊断错误
5 h; m* A5 e5 W9 _ i: ^ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
3 E( ~% @5 \2 J8 a c.UDO进行处理,去返回曾经的状态
1 S4 _$ E2 S# L# }0 ~; m5 H- S7 u/ t4 S7 ?- b* y/ F5 q8 t9 R) t
- ; |6 S2 ^! { ^# }( o" Q* Z) ^
- // ufun 的方法4 X3 `5 ^ R" _
-
" {) w8 V' A# K N - int status = UF_MODL_create_block1( UF_NULLSIGN, _
o, z x) i3 B! Y8 `9 V - corner_pts[i], edge_lens, &features[i]);' J" X$ A9 i% p$ V* S7 f
- //check for return value, y' Z- u* F3 I- {
- if (status != 0)5 }/ c c$ ~* G' \
- {0 A) j! ]! u9 `) G. A# X% w) M4 R
- //get the human readable error message
. ^. b$ b! @/ A* C1 p" t9 J7 Q- m - UF_get_fail_message(status, ugErrorText);/ \, R4 K0 g R: Z* V
- //report error to the user+ }) o& D) f: \9 y8 U: x
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _7 }0 m0 l# G) x
- &ugErrorText, 1, ..... );; l, z: I T/ S, z9 B
- //report error to syslog6 S& w2 Z) b! |2 t% @7 v
- UF_print_syslog("Failed to create block\n", false);
. ]5 G: Y6 X$ \; n/ c3 S# v z - return 1;
4 P- ^) B0 N- H& F% H, j - }
! L) ^: m" l- R/ j - status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
1 e# M2 P/ A- u# ^$ f" h - if (status != 0)+ {3 }8 ?; \+ Z5 |9 C( ~
- {
" l! ^1 F3 w9 h$ J - UF_print_syslog("Failed to get body from block\n", _
& K6 `$ w2 v# H5 v - false);: t* O, W! [9 N) h
- return;
3 n* I$ ^% b& B" F2 [ - }4 L- z1 t( L' l- Z" t" D
- ! L& A b5 n) L. T; G7 O3 w! A
- //NXOpen 的方法,以下是java代码
' h% E1 r, P9 V& K" x. C - : f1 f# g; ?! g7 e
- try
/ X4 Z; N* J9 `9 ~" J - {
; ]+ W2 X1 C, [; z' a, g - Session theSession =(Session)SessionFactory.get("Session");! ]. w3 _/ Z' N! }
- Part workPart = theSession.parts().work();+ L4 ~3 ^4 T3 M; T# O; ~
- nxopen.features.Feature nullFeatures_Feature = null;
0 r* v( F1 p; G- n! R - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
1 ^! {" }6 V5 |% {/ i - blockFeatureBuilder1 = workPart.features(). _
# U, K, j: f- H+ \ - createBlockFeatureBuilder(nullFeatures_Feature);
' a2 r: R6 g `2 k - }9 s# ^+ S: p; F, @
- catch (Exception e)
, j; q' {3 m5 w1 ^+ { - {# i" j! X' R( Z! g8 Q) q4 o
- //report error to syslog, Message property on _9 G$ ]+ k9 ]4 g
- exception object already has human
- R; P7 W7 b0 @9 R: u( U# H& Z& } - //readable message
" x2 U# d- N. i8 G - theSession.Logfile().WriteLine("Failed to create _
, q3 d* }9 j+ S, D/ g8 T - block", + e.getMessage());
8 i# z8 a! N% X' A1 @! X& F( N - }
复制代码
9 a0 T9 u+ ]2 s) I" U J( e1 t! i1 }0 V/ _
1 D4 n7 z0 S# r: [& C1 g: Z |
|