使用toolkit开发trigger的程序时,往往需要能够连续通过trigger来触发dll中的函数. 我碰到的问题: 1.配置trigger: Name: CimDll Event: Create PIV Time: POST RequireNO DLL:Cim.dll Function:PDMTPIVCreatePostOperation 2.源代码: int PDMDLLInit() { PTCERROR pdm_status; FILE *g_pfileLog; g_pfileLog =fopen("test.dat","w"); setbuf(g_pfileLog,NULL); fprintf(g_pfileLog,"begin test\n"); pdm_status = PDMTriggerRegister("PDMTPIVCreatePostOperation", PDMTPIVCreatePostOperation); if (pdm_status != PDM_SUCCESS) { printf("Failed to Register Trigger PIV Create Post.\n"); } return (pdm_status); } int PDMTPIVCreatePostOperation(int argc, void **argv) { fprintf(g_pfileLog,"test\n"); ..... fprintf(g_pfileLog,"end test\n"); fclose(g_pfileLog); } 结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效. 原因:我们使用trigger触发时,真正起作用的是函数:PDMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose (g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中. |