|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍5 f; r: u5 P" }; \# [
: P- x* A9 q) E+ A [# x
错误处理1 r7 Y0 q/ t2 c4 G
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:3 m' ~4 I; n+ }
(1)无效的参数输入
5 n) o I4 i) c7 e* O(2)企图创建无效的几何模型0 n( B( O: f* V( E% D
(3)不可预料的调用顺序
% o2 k8 K# L7 C. Q3 i+ I: Y(4)得不到的系统资源,比如内存或者文件访问等) @( q2 p& T9 Q' g! `' K2 v
所有输出均为最新。
" ]2 t3 ^4 `, t; U! C' w) v7 C+ lLINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入 `8 Z3 \8 X7 L$ l; O% H
! T6 m {1 K- H. R2 错误侦查% o% c6 q6 i/ K: O
通常返回错误状态或者异常。- i; Z1 D4 J. G6 }; Z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
6 Y% e5 L% l/ o' \7 Q* M* ?对于NX Open 通过 Try/CaTCh的架构进行处理" p( c4 [ Z6 P0 b0 P
3 错误报告
/ C' p4 J1 ]' C& |( D2 U(1)获取错误信息
/ e3 [# q$ y) }0 z错误信息,获取一个错误码,并有一段可读的错误消息$ \7 F+ n$ ^( ?' C; K4 k
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理( r0 H+ g2 \4 J; `6 f$ [1 T
NXOpen 通过NXExcepion处理
* R2 h6 K) i& O
, E$ c0 I9 u( x+ k (2)建立报告
7 i# S" O: R9 [" w, s, N7 v 需要增加信息去报告什么操作导致报错,以及如何处理
/ Z6 Y) o( I* y , q2 K* `; `1 K- v& y' \
(3)报告错误. G: T2 h$ R* _
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
7 W- V- o$ [1 M( P- Q. ^. K 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 h) ?" c1 @) [" ~+ m2 M$ s) ~
+ J- G# k4 _# o! j3 ~8 | (4)错误修复' t8 t `& X$ U. ?. d3 _
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。
) p6 Q( ~% x* E c NXOpen提供的错误修复包括:
+ n; `) d0 l8 l5 Q a.方法定义给于异常处理,让程序员来诊断错误
; Y% P1 l: W/ _3 K% }6 f b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
/ n: {2 N/ z" O8 r+ l/ Z% G! f+ W c.UDO进行处理,去返回曾经的状态0 q2 X9 j4 O# Y" |
5 m! u8 h. K5 O- i) A+ N- h8 s
- & B+ Z: T; Y1 A% e
- // ufun 的方法" D1 h5 |7 q& y! M4 h
-
" x6 C+ K2 P$ d( Z9 B+ ~9 W - int status = UF_MODL_create_block1( UF_NULLSIGN, _8 [' m. K0 c2 s! f
- corner_pts[i], edge_lens, &features[i]);0 s: w' U8 |; [( U, _! C$ A
- //check for return value9 f% q, [, \4 s
- if (status != 0)# {( X2 Q: e& d- E
- {8 q4 N2 g: Z5 h* `2 c+ {) L' [- i
- //get the human readable error message" B! J8 W; M% r
- UF_get_fail_message(status, ugErrorText);- F! B6 b2 u; d# ?
- //report error to the user
* Z: P2 ^. O3 w h4 R5 n) q - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
3 Y: t$ z, _) ?$ _4 x - &ugErrorText, 1, ..... );: q5 w$ i# z6 o2 t0 F6 e6 W* J) {
- //report error to syslog; }' t0 G$ M2 ]6 X& e
- UF_print_syslog("Failed to create block\n", false);3 k8 A9 G' Y( h
- return 1;
! I* _' q% [" z - }1 B o/ Z0 Y. u! S1 k" g% z
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
9 @ n" v, {/ E& o% w. h' A - if (status != 0)* D/ C( W2 t! m" y3 W
- {
7 B& j$ ^0 `& o& o - UF_print_syslog("Failed to get body from block\n", _6 F. A4 X$ S! V$ j# v
- false);
( g1 h1 W. i( o: ~* [ - return;( e p/ r0 b" c) B+ M
- }
% M. G/ e# p. S2 B) P- v5 q1 J - 8 t: Y7 H$ D; v7 ]
- //NXOpen 的方法,以下是java代码
+ U! M& b) o/ d7 c U R6 ~ -
) }: P- M0 X- y. t* X4 L - try
! B# W/ E7 }& o' D- f - {
, P& ]: u5 Z' k8 I N - Session theSession =(Session)SessionFactory.get("Session");
0 }8 U- ^& W$ p9 d) I6 V; X - Part workPart = theSession.parts().work();' @2 r3 M) ^: W6 k q
- nxopen.features.Feature nullFeatures_Feature = null;
. G& P1 | q5 e: a4 e - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
+ m, h$ I( Z/ ~ z# j - blockFeatureBuilder1 = workPart.features(). _
7 J+ w& @5 [9 d! x - createBlockFeatureBuilder(nullFeatures_Feature);( v! [5 ~9 N" `: S8 J! j/ Z7 d
- }
! k/ y2 M V5 C4 E - catch (Exception e)
o. Y7 L8 Z$ H - {
3 A% P- c. M* B4 J& j4 u# O) H - //report error to syslog, Message property on _
6 R( j1 `7 {+ z3 I! J' M8 _ - exception object already has human; Q9 \: c3 ^% r
- //readable message' ^5 j1 C9 Z) z
- theSession.Logfile().WriteLine("Failed to create _1 l2 ?7 z, N, U: v2 u- e. g
- block", + e.getMessage());+ l/ s$ \, E9 \
- }
复制代码 k' X( T, H+ O0 L6 F D
* M) ~! k& K8 w, a: u" z9 J
! B& Z& x+ b5 Y4 e4 A/ {' M0 F |
|