|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
% ?5 E8 _# S; B
* ]0 m+ K' ]; q4 Z/ L) j: [: O错误处理& q' w" |' d5 F0 a! E1 P1 }9 F
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:8 i3 d2 m" v3 e
(1)无效的参数输入# b4 e# P* P- {" S7 h3 P
(2)企图创建无效的几何模型; S% u/ Q8 L4 L- V6 M
(3)不可预料的调用顺序
^0 x& G- q8 m' S1 I+ Z(4)得不到的系统资源,比如内存或者文件访问等6 g B, x9 s$ N' t9 z
所有输出均为最新。
; S$ b2 ^5 Z3 V4 M; M5 i4 ]LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入7 K" r7 s6 t4 D6 R% {, D
* H2 Z5 Q7 J- n' O2 错误侦查
1 M* G/ t9 v7 k: ` @通常返回错误状态或者异常。" G0 o u0 l, J
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;& D# X, x7 h* x6 W1 I( g2 \
对于NX Open 通过 Try/CaTCh的架构进行处理
. V2 J* p5 H& |* Q8 I. m1 t) ]3 错误报告" Q/ s, C6 m5 X: S" ?& B
(1)获取错误信息: N/ ^( F/ H' X% C! A" s
错误信息,获取一个错误码,并有一段可读的错误消息
8 F/ v& ?' k S$ Q; g* \ ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理2 q) w. h5 E! v" k) j( w' W% y5 W
NXOpen 通过NXExcepion处理
6 ^$ u( p( K+ I, Z3 S; f , g& |3 v( |) Y0 B) a1 q
(2)建立报告3 T( L4 b, J9 j5 [ t0 b
需要增加信息去报告什么操作导致报错,以及如何处理' i! G. i6 R% H" q1 x; {' E$ I
* }7 `5 O* q, I8 |" h7 _
(3)报告错误
4 \% u: Y' m i2 B, ] 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
) S" y- v6 z/ V8 a/ p/ N' K 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。3 l7 x v2 i) I" l
, T4 J, q% h3 U7 [+ L
(4)错误修复
6 X B% Z! z, T9 X 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
2 D& S7 e) U) Q% Q: i/ K/ b8 Q NXOpen提供的错误修复包括:! B$ ?7 j2 V* d \& _1 L
a.方法定义给于异常处理,让程序员来诊断错误
& Z0 O) u4 l4 @; _ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
6 o3 U* K) `7 z$ D) T4 H c.UDO进行处理,去返回曾经的状态
" }5 z1 a- _7 D/ s8 P1 Z1 {% \1 p9 }
; J# A4 r: l& m7 H; G0 C# v$ B- // ufun 的方法; @$ F2 [) j: y- s
-
7 |+ M! ~$ z5 {5 p6 J - int status = UF_MODL_create_block1( UF_NULLSIGN, _* v2 x) Q$ H0 z4 ^6 C& N
- corner_pts[i], edge_lens, &features[i]);1 O' T4 ^8 A/ J
- //check for return value1 o( H: n: {1 D6 O0 z
- if (status != 0)+ k9 x4 t0 |" A& \/ _3 T5 S* o
- {
9 K0 D; l d7 m1 [% g# l' L - //get the human readable error message& m7 N. n; s; J) o O
- UF_get_fail_message(status, ugErrorText);2 k t+ g6 ?' c& s
- //report error to the user
e# `8 ~+ _+ u# g+ y" f. f6 N# n - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
( j4 n# a7 D! }/ C/ p6 m - &ugErrorText, 1, ..... );- F4 U* V0 |/ I+ I$ ^9 m& z
- //report error to syslog
% y& ^1 ]5 _* | - UF_print_syslog("Failed to create block\n", false);* j" t7 ^7 `% Z
- return 1;
( a( q# ?7 _9 c9 K% T! F1 y - }. o5 }$ M" m/ d8 V3 ]/ G
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);2 ]" T, a. Q- v; o2 z* p
- if (status != 0)% s% X! R* I2 f. g
- {
8 v) u" M7 D8 V5 W5 M. r( `4 B - UF_print_syslog("Failed to get body from block\n", _- {! ^3 n3 M# {+ k# b0 x* j
- false);3 H: |5 r' ~2 D: j9 ~, ~
- return;
1 G% s0 T2 y3 X) A4 y - }9 q8 T B% @# d$ M% y
-
% h5 B/ F! v# J$ ^- r0 C' r$ i, [ - //NXOpen 的方法,以下是java代码4 P0 b( {' X- u2 H9 r. J
-
- d' O# Y# E7 Y3 D/ | - try
8 `/ o8 E) X( p - {* v; x3 a/ e0 V$ m0 j
- Session theSession =(Session)SessionFactory.get("Session");
6 _; B. E/ A( I1 a7 W - Part workPart = theSession.parts().work();4 b5 H, ` z! N. m
- nxopen.features.Feature nullFeatures_Feature = null;5 |8 E/ a" p6 Y- F8 |
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
; Y: d, M* V7 W& K - blockFeatureBuilder1 = workPart.features(). _) u( o9 O9 M3 P1 u3 d+ Q
- createBlockFeatureBuilder(nullFeatures_Feature);0 ^) I4 V# z& m, v( E; d
- }0 G: B G! ~" b) M+ R
- catch (Exception e)+ `- }! t9 K& t6 }, |; z" X( X
- {5 K& t+ p; Z; x1 y9 H8 x8 T+ C
- //report error to syslog, Message property on _
! ` x6 p- F* J' E. X: ~) w$ L - exception object already has human
% |5 |5 D% ^+ |! ^& @$ [) w1 V% Z9 ] - //readable message7 a* W9 v$ A% G0 C+ P
- theSession.Logfile().WriteLine("Failed to create _! J$ G" m0 }, i# R* e# n& w3 P
- block", + e.getMessage());
+ v9 w' }) ]. c4 H - }
复制代码 ' V5 z7 E% ]$ s0 D
! t) f# Q3 L9 U+ K( y6 L
3 O7 l; P6 r" ~5 ], e6 Y |
|