|
使用toolkit開發(fā)trigger的程序時(shí),往往需要能夠連續(xù)通過(guò)trigger來(lái)觸發(fā)dll中的函數(shù).
7 _% Q# k; D2 ^( y9 N我碰到的問題:
2 V1 T) M& z* y& A 1.配置trigger: * L2 z1 L( U5 ^+ B2 }2 q- `
Name: CimDll
0 t! D% d% E$ |' y$ ~# p' L+ L Event: Create PIV ' @ y4 ]/ |( H+ B! [2 Z& z6 u
Time: POST
4 W. J: v) J1 y- e$ U, f RequireNO 6 _1 s& X7 U5 h3 g7 t3 J' P
DLL:Cim.dll + q; @ u( h: d
Function DMTPIVCreatePostOperation 2 Z, l! K3 u8 \* k
" e6 d2 H( H( E* q1 S$ t
2.源代碼:
9 I- j2 b! |2 O5 E ^ int PDMDLLInit()
. F R% G! t( w ]{
2 x d" P$ `: D0 S: q$ f4 ^ PTCERROR pdm_status;
4 ], K; j& y8 d- N4 ~ FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w");
% N# T. K5 ~- _0 _8 T! k, z) D; u# n setbuf(g_pfileLog,NULL); 6 S8 ?* e! R% ~2 L/ j1 B8 ?
fprintf(g_pfileLog,"begin test\n");
7 A' x# V$ r2 ~" ? pdm_status = PDMTriggerRegister(" DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);
& a" g0 i% }3 S- V) d4 F; [( w! _, p if (pdm_status != PDM_SUCCESS)
/ A T1 T: A. x- s {
, h" |4 ]' r' \ printf("Failed to Register Trigger PIV Create Post.\n"); + y, A! C2 [* H$ ]7 N
} : _3 A- B! \+ u W
return (pdm_status);
7 M# w' ]4 D# Z0 \. C2 F* q} 1 W9 a% Z" \4 W h: l
int PDMTPIVCreatePostOperation(int argc, void **argv) ( }# K! Q5 z- T# u
{
/ G d! C+ i( W2 [- G, f fprintf(g_pfileLog,"test\n"); * _" N' ]5 f0 E0 _" `
.....
' R' J8 I8 n$ P4 p& b! e fprintf(g_pfileLog,"end test\n"); 8 t f5 R- k$ d/ y6 @* ~, i8 D
fclose(g_pfileLog);
1 p- u/ e5 _4 G3 d} + h8 J2 p& m3 h" K8 f" s
結(jié)果:以上代碼存在的問題:如果我們?cè)诘谝淮蝐heckin到C/S中后,刪除test.dat文件,然后再進(jìn)行checkin時(shí),發(fā)現(xiàn)沒有再生成test.dat,在函數(shù)PDMTPIVCreatePostOperation()中所進(jìn)行的對(duì)文件的操作都無(wú)效.
i3 t6 t$ z! ^" j1 _8 N" M5 l 原因:我們使用trigger觸發(fā)時(shí),真正起作用的是函數(shù) DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin時(shí)起作用,所以在第一次調(diào)用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出現(xiàn)了上面的情況.所以注意的是:不要把一些重要的東西放在函數(shù)PDMDLLInit()中. |
|