|
使用toolkit开发trigger的程序时,往往需要能够连续通过trigger来触发dll中的函数.
% A0 g' F' X2 H$ [- p# K我碰到的问题:
0 _4 U" c3 M, f/ R. Z7 S 1.配置trigger:
5 @" ^* E2 r! l5 K7 X5 p Name: CimDll , \! I8 [) {4 q+ ?
Event: Create PIV : u1 j: S3 @. K$ B, V4 C& `
Time: POST
0 b! O' ?3 Q- J- g9 c8 E7 I RequireNO : `8 R( a( h. S+ ~) ?: H9 F
DLL:Cim.dll , c, n3 i( g; E3 C/ |
Function DMTPIVCreatePostOperation
, @7 x1 {/ ^8 l4 w0 \ ( T/ m# R3 H; W
2.源代码:
2 m4 U- X- L( h: ?; W, u8 M% }/ C. @ int PDMDLLInit()
# f' A1 D4 K! u1 F9 e{ / F$ u7 C+ `# F- S. J( i6 Z
PTCERROR pdm_status; + Q) C- D( D# ]0 p0 b1 g
FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w"); 4 M, q# d2 K8 d. N- o4 ?
setbuf(g_pfileLog,NULL); ' z6 V) q- ^1 l1 U# P
fprintf(g_pfileLog,"begin test\n");
, G9 ]' a% E% ?$ Z pdm_status = PDMTriggerRegister(" DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);
# F/ d' y- m1 r6 \) y) y if (pdm_status != PDM_SUCCESS) ( f' v+ i) S8 Z% W7 q( }
{ 4 M7 s# r6 ^. W4 A1 W) U; R
printf("Failed to Register Trigger PIV Create Post.\n"); 6 b$ q2 e `0 O |& w0 B+ k
} , p9 J, F3 g! M3 W" R: ]0 E
return (pdm_status); 5 _0 t1 j, A! t4 Z; y; m
} " w* c. Z7 ? W1 x
int PDMTPIVCreatePostOperation(int argc, void **argv)
: U$ L$ @6 s6 G( ?! g{
4 S. D& u- u$ E3 P fprintf(g_pfileLog,"test\n");
9 |% i9 @3 m. p: O8 G1 F ..... 2 F/ O7 L+ |+ l M3 ^
fprintf(g_pfileLog,"end test\n"); - W8 q$ p, I7 A0 X# J& P
fclose(g_pfileLog);
* A0 s. h+ _5 B: _! o1 e}
# W+ L1 u' a2 E5 u 结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效.
3 @& T! N! x& p3 y6 y) m" s 原因:我们使用trigger触发时,真正起作用的是函数 DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中. |
|