|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍
- n& W: Y) ]. u7 F7 E& ^1 z. B" l0 I& i- W7 D1 p( M
错误处理5 d* e% L" o7 y, n2 ?: x
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:$ l7 W8 T& o4 n) m
(1)无效的参数输入
1 r$ \. ^9 B3 j; Q! H(2)企图创建无效的几何模型
& w: v9 E/ ^+ T9 ?+ m! ?* _3 Q(3)不可预料的调用顺序. H/ @0 k$ P$ f/ T2 o) O% I
(4)得不到的系统资源,比如内存或者文件访问等8 a& ~$ u1 V( q1 w; g& U: o
所有输出均为最新。3 P8 [8 G( e9 H! q* p& u$ q8 t
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
8 Y( l& k: ^3 B: a$ J2 k7 L8 s4 K( T- p- g9 ^$ u
2 错误侦查: w: ~, C' r% s2 u0 ^
通常返回错误状态或者异常。 m4 h3 J1 o0 ]+ D1 z
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
) g4 m7 O, j- P! P对于NX Open 通过 Try/CaTCh的架构进行处理: o+ U& u9 p; w! o- V
3 错误报告
( J! z# W( K) G1 R) c; G8 J* @& j(1)获取错误信息
" E4 D. ]( _" J* ~4 s错误信息,获取一个错误码,并有一段可读的错误消息
. H9 m0 G' V+ e! C5 D" u9 X ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理+ i! r0 v' c' I9 y
NXOpen 通过NXExcepion处理
- ?0 G6 {4 |- k2 Y 6 v/ y- {, c0 I4 B1 Z0 g
(2)建立报告: j- p. o# U, z& _
需要增加信息去报告什么操作导致报错,以及如何处理8 \- M: Z% K) c, F% h- Z& `
. v. Y ]1 F; x) }1 i2 I
(3)报告错误( f7 @% d+ S% b
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。
0 k3 e8 z, A. @7 b: h. s 如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。* M' \/ m0 O$ X
! C! G! G. L, S (4)错误修复
5 C' w6 }9 e2 y/ O 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。7 D1 G* t x$ g9 d4 b0 p. i
NXOpen提供的错误修复包括:$ [# w$ E$ }) P" l1 _ z
a.方法定义给于异常处理,让程序员来诊断错误& W7 j. X7 ^* L4 {
b.当方法错误的时候,可以返回NX回话和part到一个有效的状态' O* Q: i0 j% k+ ]5 |6 \
c.UDO进行处理,去返回曾经的状态
. g% M; n- Q; ]/ x, T3 R. ?( h9 `
& L# L' C0 ]! f! E* [2 ~# `- - g" i6 f+ Y# h- _1 m: o8 b \& V
- // ufun 的方法
6 O8 U5 D+ r+ X% ^4 K# P* b9 X - $ p, _* A: y$ H+ g2 c5 S& a! u j
- int status = UF_MODL_create_block1( UF_NULLSIGN, _& L/ w6 k7 r1 {3 {5 q* a
- corner_pts[i], edge_lens, &features[i]);
. ~! E( N$ g, m - //check for return value
9 j7 i; E3 e( B" \% Y* W. o - if (status != 0)
7 v( y& U5 t. m# v& q' f3 d' Q W - {
! p& c$ J. n- r3 h0 r" r - //get the human readable error message
8 q+ n+ x* `0 b8 G& z% M - UF_get_fail_message(status, ugErrorText);; Y2 h; m5 h$ i0 {" B* n( ?0 d
- //report error to the user! x/ j2 r# V7 u) V- Q* ~, d
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _8 q- {) ?% F) t5 N. v0 @
- &ugErrorText, 1, ..... );6 T2 g% d4 S; h6 M! x
- //report error to syslog; f2 I) P, l4 d
- UF_print_syslog("Failed to create block\n", false);6 L' V0 y& V7 M5 J5 i( Z7 z
- return 1;
; Q# }- D5 B/ _ n# U7 S0 {) w - }$ S* x9 o! n/ J0 W, b0 Y- ~
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
4 v, l, p X# r1 }" k3 d" } - if (status != 0), a. |+ e. W- S* v
- {& ~- q" e) u5 p
- UF_print_syslog("Failed to get body from block\n", _
& W) h) f. [& h" s# [: b1 K b/ P - false);5 a+ l% Y, w4 @" j* a9 s% f% e
- return;
4 h4 y, c8 a: E% n& C/ o/ B2 P. k - }% l; y, E3 Y/ _ G4 o. j* |4 \
- % g! w: p# H* g$ v: T
- //NXOpen 的方法,以下是java代码# r! m) G' W' m; G3 o& e4 c
- ( d' C* ]/ [& N r) |! s7 Q1 C
- try' y1 d9 H9 \1 x9 \; M( Y
- {7 T4 v5 M0 J6 V% G8 {) p* s
- Session theSession =(Session)SessionFactory.get("Session");/ n) r. ]+ y# y$ O, C
- Part workPart = theSession.parts().work();
4 g& I( G: x% X - nxopen.features.Feature nullFeatures_Feature = null;6 u; j$ W) ]% K8 D! p3 A& u5 I4 i
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
% n) @+ B% a, z - blockFeatureBuilder1 = workPart.features(). _
4 Q8 t9 w# G6 J* K - createBlockFeatureBuilder(nullFeatures_Feature);
5 r( Z' x/ X4 G% c4 n+ n/ O - }) n2 S2 V* s4 g2 i5 v% ]) I
- catch (Exception e)' U$ i& r2 y. ^3 W( w- X
- {
' ~9 O% n8 Z* S5 l% Z) }7 \ - //report error to syslog, Message property on _
' J: g0 @1 y/ z - exception object already has human
6 ^0 M) a% F$ D, o/ s( Q - //readable message
- T# y) a$ s/ I4 s0 O( U - theSession.Logfile().WriteLine("Failed to create _
G R9 K" @2 [: g, d9 `1 B - block", + e.getMessage());
' n3 I9 o$ z, y5 L+ s) o5 n2 V' q - }
复制代码
+ m8 b5 u5 i7 R. g/ @; v1 F2 j
' \* H( K) a( l f; C
+ D V+ o3 R e1 ^* N |
|