|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍/ n% c6 C5 z- `; `: h
* i3 a/ @8 g2 ]5 Q* D
错误处理
' ~* L: H$ H! S% R( ^1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:( a0 U" T; z7 W2 f
(1)无效的参数输入# n/ R' m, Q1 l) [4 w
(2)企图创建无效的几何模型
4 h; h0 E- l+ x% s8 o(3)不可预料的调用顺序) ^4 R) Z. B. S& r, D1 e5 ?
(4)得不到的系统资源,比如内存或者文件访问等3 k! ]7 ^2 O$ |9 s5 X! b
所有输出均为最新。7 D" o# H, Q2 A
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入 \: f7 x4 |2 p
) [' j' K. y' z/ s$ w: g: [! x
2 错误侦查( B: X* ?# v3 R( H6 t0 [* \' ~
通常返回错误状态或者异常。; [0 _( X5 b, X I- [; f
对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
, b' g. Q4 P3 }0 ]2 U/ Q对于NX Open 通过 Try/CaTCh的架构进行处理
1 p# J0 |% p7 p3 o2 V3 错误报告3 g/ R1 n, i9 X& H- i* a
(1)获取错误信息
6 E, [- F1 G" `: D# C错误信息,获取一个错误码,并有一段可读的错误消息
2 h0 R8 [/ ^! C" y8 X- i ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理# e L' D$ H3 K9 N( @1 V+ l' o' q
NXOpen 通过NXExcepion处理: J3 j3 z8 f, h3 _6 o$ q( k+ u2 g& Z6 G
9 t) V8 o. s* J. N: C9 k/ j (2)建立报告
* s! `4 X) J! h3 L% D! C4 l0 l8 ^ 需要增加信息去报告什么操作导致报错,以及如何处理3 {2 q- r' ~4 i7 B, {3 `# w
& d* l+ ~: u, B (3)报告错误
7 N5 B# `# T! v4 N/ h 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。) T- _* \, w' d$ L$ K
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
' I! u4 d$ N, k) L, W( s 6 E; N. J x6 w) J {6 ~% K
(4)错误修复
, y: y6 a- t& t1 M! F1 b( @' @ 是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。 L, d9 v* o& c7 w- [
NXOpen提供的错误修复包括: r8 S7 S5 Q9 M5 n# ~ N4 F2 H
a.方法定义给于异常处理,让程序员来诊断错误
1 \3 k; k' g+ R3 k% b- N4 @ b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
/ c4 g: S( O0 e- b, ~ c.UDO进行处理,去返回曾经的状态9 B$ S _$ m, y) _0 d
' s4 [0 x: ^3 S) d. t- * C, W% H# o4 Y8 Y g$ e+ o
- // ufun 的方法
$ y- D& e/ H( ` b, ~8 \ - 0 n5 t; L( `7 V6 Y, M/ l) X& G
- int status = UF_MODL_create_block1( UF_NULLSIGN, _: I& `& j# M7 P) V& ^
- corner_pts[i], edge_lens, &features[i]);
5 W1 h% Z7 i. H- t3 P' T - //check for return value
% X3 c0 C+ I4 c: V - if (status != 0)0 V6 G% Z. k/ t/ J* E# T$ E
- {
- V, k; [( y/ V; Q - //get the human readable error message
: h/ F3 k2 _6 h* ~, b8 z - UF_get_fail_message(status, ugErrorText);8 o* y5 y% C* K' X0 Z0 F/ w
- //report error to the user' q1 \( O; R# H1 _0 {
- UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
3 z% y. e9 l5 s4 G+ | H - &ugErrorText, 1, ..... ); G: N! X8 U- ~5 N4 P
- //report error to syslog
( s4 {6 S ]& q& t+ v2 [ - UF_print_syslog("Failed to create block\n", false);
; }9 g* y1 ~% S( q - return 1;
; u8 `. e) g: _1 p( V - } g( H6 f4 [& D4 _, w c3 V
- status = UF_MODL_ask_feat_body(features[i], &blocks[i]);) L) Q1 f. s0 X5 _; ` f/ a; V
- if (status != 0)
8 q: r6 | M9 a. ?9 J4 N - {
0 D) j$ M, {( s- s& u4 _! h8 S - UF_print_syslog("Failed to get body from block\n", _% a; i0 w/ N- J! R& X
- false);! B2 A; I% ~& y% o9 E0 R- p
- return;* @* N6 H r8 ~) O* F
- }. u! ?9 u. `3 Q0 o. A
- ; x+ ~$ \: d" O# a" m' K( s+ f7 H6 `
- //NXOpen 的方法,以下是java代码; Q; K, \! I7 i6 q7 s \
- 1 E) E7 g: D. x) t+ N9 |# [
- try7 T, y+ _; j+ n b R
- {
! x) j/ e9 h- F - Session theSession =(Session)SessionFactory.get("Session");& U" {8 k3 {2 [* H5 }
- Part workPart = theSession.parts().work();
; C7 f/ F/ b) k( R5 ?4 D) w - nxopen.features.Feature nullFeatures_Feature = null;% m- U# Y/ |) V. a6 C8 W* K
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
; x* Y$ d0 s J' V, R& y0 t - blockFeatureBuilder1 = workPart.features(). _2 K4 g4 G, C; d7 I, @' s. O6 L
- createBlockFeatureBuilder(nullFeatures_Feature);
! L$ H$ s7 _- J3 p2 D! A) B7 x - }; @% w+ C6 N& h4 L& _. v
- catch (Exception e)
/ w7 l) C8 O; ~* d3 p8 \ - {6 X6 r0 U1 r# V
- //report error to syslog, Message property on _
( B; \/ Y$ d: m6 R/ v - exception object already has human
, y* e. C1 S7 x8 W& e, H - //readable message0 b; `6 Z* A' B l A/ V+ N
- theSession.Logfile().WriteLine("Failed to create _
1 s" X4 K7 K; Z; T) ] - block", + e.getMessage());0 v& p" z- e8 x6 r0 T9 X
- }
复制代码
1 E X- n$ W& k& g5 ^$ F' r3 I1 m8 p4 s: a* o4 D) ~: I1 Q& P- Z
. h$ ]* |, i: [* [! L; O
|
|