|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
关于NX 二次开发中,错误异常的处理详细介绍: ~) B- R- b' ~) S# `6 B8 w
+ ?( n7 p7 t9 ?3 m, O$ |错误处理8 U; p2 r8 T# p! w. E1 U% M5 s
1 NXOpen API设计和捕获阻止程序成功执行的错误,这些错误包括:
/ Q r5 X) R5 [) i6 R+ O(1)无效的参数输入7 F8 b7 }% j q9 D& V
(2)企图创建无效的几何模型7 B! H3 G! `0 I$ A& \
(3)不可预料的调用顺序
1 M- Z: u' g% V, ?1 u(4)得不到的系统资源,比如内存或者文件访问等$ S( S( [7 m2 l* n h# e+ m, k
所有输出均为最新。& O( J; @$ m |7 [- K" U, h
LINK : fatal error LNK1168: 无法打开 C:\NXdev\Code\confirmcylinder\x64\DebUG\/confirmcylinder.dll 进行写入
6 a/ |) L1 ]# T8 n4 i$ |: _
+ @: d" X, ^/ H/ f, r2 错误侦查: A7 |7 _! e4 y1 G
通常返回错误状态或者异常。
1 ]9 w- I5 {$ W- ^9 \$ \对于ufun,通常返回数字,如果是非0的话,就是程序出错,对每个return都要进行判断非常重要;
( |- y$ t# V7 l, n5 d% m4 K对于NX Open 通过 Try/CaTCh的架构进行处理$ n* x" H: o; h T9 v% {6 v7 N
3 错误报告
; }4 X6 v: b& s% w(1)获取错误信息3 u$ {0 k6 }8 Q# J E* [4 J
错误信息,获取一个错误码,并有一段可读的错误消息! J) i4 H O" ~* w/ v: Z
ufun 通过 UF_get_fail_message进行获取,如果需要翻译到本地语言,可以通过UF_TEXT_translate_string处理
! S& {! {6 R% w* e/ ^: w; T NXOpen 通过NXExcepion处理/ i/ \% u4 j% d
0 r1 s# ~: m1 b+ C8 c3 R" }
(2)建立报告7 @* ?0 B: p" g5 ^
需要增加信息去报告什么操作导致报错,以及如何处理* ~7 P V% Z J2 n+ U4 I# W
% C: h! [, M# d, r0 d" [
(3)报告错误
8 s0 v5 h+ S" W# H0 y* B2 [ 报告信息ok后,就需要处理错误了,对于致命的错误,需要给用户一个选项进行退出程序,而不是使得整个程序崩溃或者part文件损坏。" z, k6 V8 y) d5 m' r
如果是可以接受的错误,需要将错误日志记录在NX日志log里面,或者设计一个对话框来处理错误日志。
5 _# M [5 @, G4 J. u" W
+ t8 ]2 E. c. g (4)错误修复1 [ \$ ?: D1 M" |% ^7 L0 x5 |
是一种特殊的错误处理方式,比如倒角时候,半径输入过大,这个时候通过合理的提示,用户还可以返回到原始的对话框,重新输入半径。) U3 d4 c7 S$ Z
NXOpen提供的错误修复包括:: s/ F1 J( |1 x5 b. T) c# X! _$ B
a.方法定义给于异常处理,让程序员来诊断错误
+ S7 W+ g3 Z$ o8 A r$ ^- l/ L. q b.当方法错误的时候,可以返回NX回话和part到一个有效的状态
% F' V4 i9 _" C; n* t c.UDO进行处理,去返回曾经的状态
4 l B) K* ?( ~% W/ q+ ~0 e+ F' {# C G6 s
- " g' [6 M& d+ x6 z k4 r+ p/ ^
- // ufun 的方法' l7 U; p0 z9 Y
- ) {" w0 Z& O W2 _. U8 |
- int status = UF_MODL_create_block1( UF_NULLSIGN, _
+ w5 x8 q" a" F6 a/ g - corner_pts[i], edge_lens, &features[i]);. |- l) d7 r f. q
- //check for return value4 E0 L* @3 b6 i9 M# A& L
- if (status != 0)8 |4 y4 E$ P9 [" V6 E6 N
- {
) s! o# a0 A& S# y' Z - //get the human readable error message& B& V) ?, F9 K4 t/ s
- UF_get_fail_message(status, ugErrorText);: z# c1 }5 k1 N, n" s# n
- //report error to the user
3 D- M/ u' c- a2 ~ - UF_UI_message_dialog("Dialog", UF_UI_MESSAGE_ERROR, _
$ e7 N$ g5 o1 O- Y& l1 M: m; o - &ugErrorText, 1, ..... );
g8 I! x5 M9 w; g1 d - //report error to syslog1 @+ G9 D4 s O9 N5 Q( J5 C. A( n
- UF_print_syslog("Failed to create block\n", false);0 l" p1 v* {) s
- return 1; r' _3 T" W2 E1 e/ R# s1 e
- }
/ x' Z6 Q* ^5 p9 U6 x6 i" {, G - status = UF_MODL_ask_feat_body(features[i], &blocks[i]); U4 w! A- N: j U" c3 o
- if (status != 0)! o1 c5 i3 a3 w
- {4 P8 [$ d0 |" h$ q) {
- UF_print_syslog("Failed to get body from block\n", _8 g: J! m4 A* w( r, x, a5 Y8 S
- false);7 } ^2 c% e7 y* S& e! P
- return;' \0 y! h1 M" c$ w/ G
- } B) j* M& ~3 N, z% N% C. k
- M6 l: j+ e5 r8 g* w- b
- //NXOpen 的方法,以下是java代码. \; P! a; o, k3 j1 ^1 X2 d
-
) n% m* Y# A2 @# j/ P - try. [- i. t' s2 y1 ^: i/ w( u
- {7 H P' u3 `; T. i0 a$ y0 u
- Session theSession =(Session)SessionFactory.get("Session");
/ e @: z/ Q c+ O - Part workPart = theSession.parts().work();1 T& t ~2 g& Y$ u+ T7 {4 K
- nxopen.features.Feature nullFeatures_Feature = null;1 R1 b- A! r7 g) \; h) a
- nxopen.features.BlockFeatureBuilder blockFeatureBuilder1;
. r, ]% K2 [; G* i( w( T) w - blockFeatureBuilder1 = workPart.features(). _
, [: @4 w) F6 X! M F; @' X - createBlockFeatureBuilder(nullFeatures_Feature);5 V, T% `( f8 C% E+ x( c/ h0 t! N
- }% _* {3 ?* J1 m% @* r) p
- catch (Exception e). G( F: o' B' Z% y/ T
- {
4 h O2 g# B: p# {0 P - //report error to syslog, Message property on _) e( }; z: d0 j7 A% @$ r
- exception object already has human. S. C8 k: C7 C% n) O
- //readable message, g/ S1 Q0 ~) L3 ^
- theSession.Logfile().WriteLine("Failed to create _" {6 N! l8 Z5 L- g: ?
- block", + e.getMessage());# \0 v! K5 I/ C( M8 \# C7 M' t
- }
复制代码
( H6 L- | I2 _4 b
1 n7 Z2 L! _) {, Q7 E1 M
( {; w9 Z7 D8 \ |
|