|
使用toolkit开发trigger的程序时,往往需要能够连续通过trigger来触发dll中的函数.( W$ z8 V" L8 h8 l/ k ] 我碰到的问题: " F( X8 x, X1 `, n" P0 B& T1.配置trigger: & d4 g7 Y+ o' bName: CimDll* X8 v. R! c/ B) e! f Event: Create PIV 4 S7 K, Y( z) o& J5 {2 W# @3 j/ \Time: POST" Z& n( Y6 P: m" W$ z RequireNO9 R( x x( r4 C* c- o DLL:Cim.dll ; y) I' `4 K% Y7 Y( o) p. L1 fFunctionDMTPIVCreatePostOperation5 c6 H/ {, r" b2 L& ~4 e 5 E/ L3 ~+ h! P6 i; r5 u4 w5 | 2.源代码: * s p' o' q7 j/ I) e! Dint PDMDLLInit(); ^0 `( Y6 U4 }' k* \* D {& [: L$ i+ l) B9 O4 T PTCERROR pdm_status; 7 Z# x7 d7 P4 A; fFILE *g_pfileLog; g_pfileLog =fopen("test.dat","w"); ! T- K9 ^4 y+ T4 E& o2 W* Ssetbuf(g_pfileLog,NULL);+ q. o [ o# l6 b fprintf(g_pfileLog,"begin test\n"); # G. n: f" N# `1 j8 W8 Ppdm_status = PDMTriggerRegister("DMTPIVCreatePostOperation", PDMTPIVCreatePostOperation); / M0 k6 R3 I& b9 ^" d- I. z8 x( A% Yif (pdm_status != PDM_SUCCESS)$ Z5 o+ F( s8 ]# W# I4 b { 3 U" M$ H- T; l8 p2 I' h0 L! Oprintf("Failed to Register Trigger PIV Create Post.\n"); ! A' K& w& V9 E2 F9 F: [: w* D} 4 z( S" |( u+ Z' ^. Mreturn (pdm_status); / X8 o8 w2 C0 {: E}5 n8 J: E) v. d+ C9 Y- {. n int PDMTPIVCreatePostOperation(int argc, void **argv)9 z4 T/ R$ f* N y( L, J {, |! e( R, y* A9 Z fprintf(g_pfileLog,"test\n");7 Z2 U) o2 T1 M9 S: p# T j ..... : ?/ }5 v: p' q( F& j% j/ ~1 L- @( Zfprintf(g_pfileLog,"end test\n"); + \+ S8 j4 M' G" G. A" s7 Lfclose(g_pfileLog);' \+ z" Z$ L% j" @, y4 l3 [# J7 x }. {7 r9 b: \, X0 |+ Z, }7 x 结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效.; d2 J$ R6 }! v& d/ d% B 原因:我们使用trigger触发时,真正起作用的是函数DMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中. |
|