|
使用toolkit開發(fā)trigger的程序時,往往需要能夠連續(xù)通過trigger來觸發(fā)dll中的函數(shù). 7 M+ o& L N* U1 x
我碰到的問題:
5 K# N0 Z8 s6 X5 u8 o3 Y2 v' U 1.配置trigger:
1 M5 |+ z5 \7 n7 L6 v Name: CimDll 7 [/ _9 _/ d/ O# T! ?+ ^5 z1 J3 h
Event: Create PIV
, s6 G( Q; B" h5 ^) o+ G/ d Time: POST 9 A. v4 u# u1 c3 N& c5 j, i" `+ X3 f
RequireNO
* \0 H5 F) s7 |. }8 ^ DLL:Cim.dll
3 x; s0 ]' y) @5 Z* |: @) ]9 Y1 O Function DMTPIVCreatePostOperation
& w, A0 a0 h3 T. _ 0 O* k" Z6 g+ G8 V( i
2.源代碼: ' q7 ~" P/ @4 A* M* g! |. V, S0 ]7 k
int PDMDLLInit()
0 T6 p/ [) m: k) O{
/ M. I, Q4 m' t/ k0 E: Z- ^6 U PTCERROR pdm_status;
4 [* {. O- V% i FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w"); ! U* o8 Y0 i4 v1 @+ q4 D
setbuf(g_pfileLog,NULL);
3 V" ]+ n# z8 r' i; P" I- j8 H, P fprintf(g_pfileLog,"begin test\n");
! g7 o; R) D3 ^3 |: D% k3 b pdm_status = PDMTriggerRegister(" DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);
+ Z0 F7 @" c& W+ l. | if (pdm_status != PDM_SUCCESS)
2 S% p$ N+ I1 c$ J% \3 q" Z1 L {
5 ~& W4 a0 z6 Y printf("Failed to Register Trigger PIV Create Post.\n");
7 O* i/ f2 c6 E* F) |; B) x } 4 Q1 U- N% P: l, @- Y) X% y
return (pdm_status);
) S8 A$ y0 [' O' J}
/ z3 i3 u# `4 E8 w* e; q0 z) J3 Mint PDMTPIVCreatePostOperation(int argc, void **argv)
0 x0 I% K( {! Z! C. i* o1 m" R) v{
" ]( k. r. w5 ~7 B% } g. b8 b1 c fprintf(g_pfileLog,"test\n"); 9 v+ w8 [; X- U7 X7 F; ]! X. Q
.....
: g3 w( d" A; O* M( e% k fprintf(g_pfileLog,"end test\n"); ' z! k8 \* G* ~: I& t$ G
fclose(g_pfileLog);
. y3 s1 O- q: T0 u3 H" Q6 P6 q} # `* \# n( [: `% {4 ^3 ?! `5 v
結果:以上代碼存在的問題:如果我們在第一次checkin到C/S中后,刪除test.dat文件,然后再進行checkin時,發(fā)現(xiàn)沒有再生成test.dat,在函數(shù)PDMTPIVCreatePostOperation()中所進行的對文件的操作都無效. ; ?- _& `0 K4 [* n' ~
原因:我們使用trigger觸發(fā)時,真正起作用的是函數(shù) DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin時起作用,所以在第一次調用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出現(xiàn)了上面的情況.所以注意的是:不要把一些重要的東西放在函數(shù)PDMDLLInit()中. |
|