|
使用toolkit開發trigger的程序時,往往需要能夠連續通過trigger來觸發dll中的函數.
1 J9 _9 F' i% E我碰到的問題:
4 W8 P2 G9 V5 @5 K% l, ^) Y5 D 1.配置trigger:
' b) ?- Q2 z- b& C; V- I- P$ C6 Z Name: CimDll
( T" l9 |) H0 Y# a5 | Event: Create PIV
$ I+ t$ E3 e% Y) Z+ X Time: POST
6 E2 f; L4 @' R2 \1 h# T9 x RequireNO
1 w! q9 W3 {' _, |1 l/ K0 [ DLL:Cim.dll
* s& h# U, S1 l" W$ K2 M% e Function DMTPIVCreatePostOperation c6 i3 R0 R) |+ e0 A
& J" ^/ q! p' v/ J% y- s" b 2.源代碼: 2 z2 q+ K/ M0 v1 V) t
int PDMDLLInit() ( f; s) H2 |7 |2 k, p! s
{
' @: z; j, d5 U$ l7 i9 C/ a PTCERROR pdm_status;
6 z" p/ B X$ u* Y+ a, N- d7 U FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w");
. Z, B m D1 i y' ` setbuf(g_pfileLog,NULL); + a) d5 L8 k \' c; I1 T
fprintf(g_pfileLog,"begin test\n"); % L# G" L4 w- Y0 X
pdm_status = PDMTriggerRegister(" DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation); 2 T/ @/ D: w" g
if (pdm_status != PDM_SUCCESS) / Z# k+ A# ?4 I# w
{
J6 o4 I3 z( d printf("Failed to Register Trigger PIV Create Post.\n"); 6 M& d- C" ]7 v
} 9 m$ [4 I2 Q ?& R1 B, t
return (pdm_status);
( Y n% u* b6 b$ w}
, U. E `5 V7 Q/ @/ ^$ iint PDMTPIVCreatePostOperation(int argc, void **argv) 0 B. l9 R+ ?6 g8 w7 a# q
{
( a" t5 ~# m" O+ X6 b0 W: a fprintf(g_pfileLog,"test\n"); & w/ S7 s- f" W1 i% [0 P. ]
.....
# D) R' y' ]: h. A( _% t fprintf(g_pfileLog,"end test\n");
: o/ ^( w: S, { fclose(g_pfileLog);
+ h$ J9 N4 U- R+ `: ]# n}
* I3 l# N- ?( @& _. h" j( r# r 結果:以上代碼存在的問題:如果我們在第一次checkin到C/S中后,刪除test.dat文件,然后再進行checkin時,發現沒有再生成test.dat,在函數PDMTPIVCreatePostOperation()中所進行的對文件的操作都無效.
% E& ^& ~( J$ y. h! z7 c. `' N. O 原因:我們使用trigger觸發時,真正起作用的是函數 DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin時起作用,所以在第一次調用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出現了上面的情況.所以注意的是:不要把一些重要的東西放在函數PDMDLLInit()中. |
|