机械必威体育网址
标题:
Pro/E二次开发使用toolkit开发trigger的程序
[打印本页]
作者:
sunshine1026
时间:
2008-8-6 13:31
标题:
Pro/E二次开发使用toolkit开发trigger的程序
使用toolkit开发trigger的程序时,往往需要能够连续通过trigger来触发dll中的函数.
; }5 W+ S9 {1 ]0 t
我碰到的问题:
9 t, c# x; w3 I+ |1 `+ ]
1.配置trigger:
7 q: e o; g& ~+ x- ~. d
Name: CimDll
0 y/ p8 i' U% }$ j. z
Event: Create PIV
) [# g6 a! ~: h4 t5 X7 x7 d( V
Time: POST
7 H) y' i" P6 \7 q/ f
RequireNO
( _' S9 O! Y: @- J5 h
DLL:Cim.dll
, ?( z3 Y3 f4 `+ a& j4 N, i
Function
DMTPIVCreatePostOperation
( _& z1 _9 M% T! U+ N8 z
, ^8 ?$ j0 x4 V+ r5 L+ D' X
2.源代码:
! }. c2 F& r7 E
int PDMDLLInit()
/ M& y/ x- P: A" z, F( P% p5 J% Y
{
6 g6 M+ C& o6 R% @) R7 J) \, h k
PTCERROR pdm_status;
& S) x4 t( _: I1 Q. l( }0 f+ ?6 W
FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w");
2 Q% ?" Y% J% `( g. K! |1 W
setbuf(g_pfileLog,NULL);
& C8 Z0 D+ v% Y5 r
fprintf(g_pfileLog,"begin test\n");
0 |# `! }% b" p
pdm_status = PDMTriggerRegister("
DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);
0 f$ R j& p0 \- i
if (pdm_status != PDM_SUCCESS)
: Z& O# H% h. }& j
{
: a3 O7 b" `" m C" r% \1 h
printf("Failed to Register Trigger PIV Create Post.\n");
- A2 r0 Y$ p' S( W4 x0 W
}
% y5 d# u( o$ ?
return (pdm_status);
8 g. M9 w9 v# |( A r4 Z$ m/ z
}
9 U4 J( a5 T" s$ T) w2 W
int PDMTPIVCreatePostOperation(int argc, void **argv)
3 B6 S5 u. {0 V$ W" [
{
K; p# X8 v" c. G( u: w: O2 k s
fprintf(g_pfileLog,"test\n");
/ c1 @+ Z! v- r! ]: t; I7 d7 g* R
.....
$ D5 `) U- q- k
fprintf(g_pfileLog,"end test\n");
8 c0 N. c8 U9 v
fclose(g_pfileLog);
3 d) [1 ^) X' q. q
}
7 g8 M8 N$ P& {* b! F( e- k; o
结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效.
, a) g/ D0 g& I' E4 z/ y! B& X7 A" W
原因:我们使用trigger触发时,真正起作用的是函数
DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中.
欢迎光临 机械必威体育网址 (//www.szfco.com/)
Powered by Discuz! X3.4