您的位置:网站首页 > Proe教程

用toolkit开发Pro/E二次开发的trigger程序

时间:2011-02-22 10:39:08 来源:

  使用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 ");

  pdm_status = PDMTriggerRegister("PDMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);

  if (pdm_status != PDM_SUCCESS)

  {

  printf("Failed to Register Trigger PIV Create Post. ");

  }

  return (pdm_status);

  }

  int PDMTPIVCreatePostOperation(int argc, void **argv)

  {

  fprintf(g_pfileLog,"test ");

  .....

  fprintf(g_pfileLog,"end test ");

  fclose(g_pfileLog);

  }

  结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效.

  原因:我们使用trigger触发时,真正起作用的是函数:PDMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中.

  使用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 ");

  pdm_status = PDMTriggerRegister("PDMTPIVCreatePostOperation", PDMTPIVCreatePostOperation);

  if (pdm_status != PDM_SUCCESS)

  {

  printf("Failed to Register Trigger PIV Create Post. ");

  }

  return (pdm_status);

  }

  int PDMTPIVCreatePostOperation(int argc, void **argv)

  {

  fprintf(g_pfileLog,"test ");

  .....

  fprintf(g_pfileLog,"end test ");

  fclose(g_pfileLog);

  }

  结果:以上代码存在的问题:如果我们在第一次checkin到C/S中后,删除test.dat文件,然后再进行checkin时,发现没有再生成test.dat,在函数PDMTPIVCreatePostOperation()中所进行的对文件的操作都无效.

  原因:我们使用trigger触发时,真正起作用的是函数:PDMTPIVCreatePostOperation(),而PDMDLLInit()只是在第一次checkin时起作用,所以在第一次调用PDMTPIVCreatePostOperation()后,我就fclose(g_pfileLog),所以出现了上面的情况.所以注意的是:不要把一些重要的东西放在函数PDMDLLInit()中.