|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍) \0 R& Y/ L6 \' X
h7 Q) S' K$ }错误处理
o4 z5 V6 T& ]4 l$ J1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:3 L' w, G7 j9 `
(1)无效的参数输入
/ m. b" X% H5 ~/ \( N' K; o(2)企图创建无效的几何模型( q: n' V Q* n& ?& ?# D
(3)不可预料的调用顺序, f6 k5 {% `" M, i
(4)得不到的系统资源,比如内存或者文件访问等
2 }8 l" U7 o6 u, r+ ~ 所有输出均为最新。
) f5 a" A' |6 D. V& ~6 ?, a7 `LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
6 k9 e! O9 l# u* Q+ `0 R; {5 \% r( n* E
2 错误侦查
' E' Z9 O( A6 n9 R通常返回错误状态或者异常。* r0 q6 @# [2 o) a- D! u$ i
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
" r$ {, Q" S3 O% u1 N) T n对于NX Open 通过 Try/CaTCh的架构进行处理
* B. n4 h( k. ~5 |7 C3 错误报告! @- r. {6 q1 \* c: ~, u. c; t
(1)获取错误信息
; a( G/ {5 q3 W+ z1 t' R- w错误信息,获取一个错误码,并有一段可读的错误消息! _3 p3 {6 v( S" y! n7 N+ E. L
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
" x; u4 P9 ~; K6 p5 A0 ~* L% o% h NXOpen 通过NXExcepion处理, U+ _+ }/ s$ }- J* c$ T( D. P3 b
( a" R) \- s: w" Q
(2)建立报告$ }( F2 c& C$ p& g& V& a3 y
需要增加信息去报告什么操作导致报错,以及如何处理
9 c/ |- i4 Y. x3 x) f0 y ! g6 F2 Y. L) X# v' E2 V/ B7 W5 f2 h
(3)报告错误: _, o# O6 u4 k- ]) q
报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。+ D2 r$ J: x# A% Q9 l' C2 y
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
8 X9 O- o7 |( I/ P5 z ' R! G+ }) p G$ j
(4)错误修复
; F s$ u7 s2 e1 z+ i- ] 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。3 [) e1 E" H" h2 X$ Z
NXOpen提供的错误修复包括:1 S2 ^' ^# M* `8 ]9 }
a.方法定义给于异常处理,让程序员来诊断错误
$ p2 A2 T7 A- K3 B: B+ m b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
! V6 T$ G- t0 C' G' Y! \; r! x c.UDO进行处理,去返回曾经的状态
# S; o+ z$ f5 R+ K
4 \- E2 ~3 q) A2 e" v
" N) H$ Q2 | d- // ufun 的方法4 }% G; f7 J+ r2 t8 e
-
z2 e& q: ?" H, @0 Q - int status = UF_MODL_create_block1( UF_NULLSIGN, _
( |# n( i, H- G0 ? - corner_pts[i], edge_lens, &features[i]);+ v, o& P$ j% {7 b ^
- //check for return value
5 y( b5 r3 k# _& x0 J3 D3 E% Q- L - if (status != 0)# F8 R" F. R4 t. n# X) e7 X* [
- {0 r5 v |9 W$ N
- //get the human readable error message" l3 m" ]: `" _8 j3 j# z
- UF_get_fail_message(status, ugErrorText);
( o! d- E* p1 l2 J8 b0 o7 W6 ~ - //report error to the user
4 F5 m7 {7 Q0 e' X+ N% W - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
: E* a7 F$ o$ ~1 E6 R! B - &ugErrorText, 1, ..... );$ u, f3 d# ~4 W( `8 i, v+ {3 E
- //report error to syslog
" a. l5 s* c9 q& } - UF_print_syslog("Failed to create block\n", false);% F6 E6 |8 l. P( H! C
- return 1;: \3 G2 a3 q3 ?9 g0 k; m
- }! _" B$ G- B+ z" M* [( v
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);
# j7 n6 b- R+ D* R$ ~- n# X - if (status != 0)6 y- S! G# I; q
- {
& T. g$ F7 o S: [, c - UF_print_syslog("Failed to get body from block\n", _
; n2 x, \7 _) I) H9 A - false);
' f; }4 w0 M* r; ` - return;' b7 W: n. _3 ^) M) |% d+ d( J
- } v+ s! }& X" M
- 9 s% x5 f s% }! Q& o' h* }# a
- //NXOpen 的方法,以下是java代码
# J; F }& h8 T- z! W# j - / ^1 n X. B' F' L( N! M" F
- try6 w, N4 v7 R" r# R; }
- {6 f, ~* M. R, |+ {
- Session theSession =(Session)SessionFactory.get("Session");
' b0 E* m, e, C - Part workPart = theSession.parts().work();
/ L. w+ x6 Y- f# q - nxopen.features.Feature nullFeatures_Feature = null;
- ~( X7 M# r; y/ K* Q" s - nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
: s4 i+ W2 f' F) P2 F5 ` q# B# ] - blockFeatureBuilder1 = workPart.features(). _5 }1 y- Z# v6 f
- createBlockFeatureBuilder(nullFeatures_Feature);
& Y+ ` b; ?9 q7 {3 i5 Z, ] - }1 N: A) G+ r, x' B0 V/ ~
- catch (Exception e)$ b- q3 d7 | S3 H* ~
- {
4 b0 G% x, Y4 w' K" q: v4 d - //report error to syslog, Message property on _
8 a. ?; b! X9 | }9 W - exception object already has human t- ` f9 c, {+ a
- //readable message8 n) k) _6 L4 @: o+ L u
- theSession.Logfile().WriteLine("Failed to create _& }2 `1 T, w9 m2 Q0 n
- block", + e.getMessage()); r- @ t4 b; D
- }
复制代码 3 X& e% C) |+ Z; \ f" t
, C5 I, F6 H( e: b
" o: S3 X# a. c2 a+ J |
|