|
使用toolkit开发trigger的程序时,往往需要能够连续通过trigger来触发dll中的函数.
g1 \: v! B3 c我碰到的问题: . a9 q4 b: L% ?- e2 L; I
1.配置trigger: ) i" ?/ F5 V, f4 w
Name: CimDll 5 {2 T' M, @; A. h! Q) c& r
Event: Create PIV
3 \9 o' n3 t* ?5 q; t Time: POST , @+ l, {2 e' l# q0 t0 ?
RequireNO {2 H5 O) F$ g* U+ Z
DLL:Cim.dll ! v; K6 [* X. ~& T3 G; F
Function DMTPIVCreatePostOperation 7 @& A& n1 ^: J0 d& w( ]6 p; p X
6 w% [4 Y0 I' m8 A- w; q 2.源代码:
" T3 G' m0 V! _ k3 o K) v, } int PDMDLLInit()
" k/ f+ V- g3 d% q/ G{
6 w% W% z+ x' f5 i! C PTCERROR pdm_status;
; s7 \7 J" R; R; n FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w");
7 M4 f+ c+ m r) a setbuf(g_pfileLog,NULL); . |' {5 j( t5 ?+ m7 [" C" w
fprintf(g_pfileLog,"begin test\n");
. J' R! _! f. ]/ j8 i( A2 \; O pdm_status = PDMTriggerRegister(" DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation); ; j% P" C, ~2 V% \7 H% s: Q1 k: v
if (pdm_status != PDM_SUCCESS)
/ \& y7 `: \0 V8 r; m {
2 ]! i6 B3 o* D4 I printf("Failed to Register Trigger PIV Create Post.\n");
& `$ M" l* \8 z# `8 w L; d } 7 N, ?6 o3 _7 k2 A! o& T
return (pdm_status); 4 J( m2 D" N$ Y4 W1 ]8 J
} ' }3 A& T# C! J7 U$ o8 Q
int PDMTPIVCreatePostOperation(int argc, void **argv) 2 N3 ^6 H; [- n% q0 i" m! P
{
8 I( C% }* Q1 U2 @ fprintf(g_pfileLog,"test\n");
/ N" U& g' w* a7 | ..... v9 l0 \2 I* \2 `8 Z$ Z( K1 l- e
fprintf(g_pfileLog,"end test\n");
, r; o0 Z, d: o# ^5 L8 M) { fclose(g_pfileLog);
5 \+ c! u6 f- Z# V; O8 g}
/ {* z# C0 _1 O. l: e. m4 v 结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效. 4 ?. i# s4 ]9 Z
原因:我们使用trigger触发时,真正起作用的是函数 DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中. |
|