马上注册,结交更多同行朋友,交流,分享,学习。
您需要 登录 才可以下载或查看,没有帐号?注册
x
我目前使用VC6+UG NX3进行二次开发。
在UF_PART_open函数中,需要一个UF_PART_load_status_s结构体的实例。根据UG文档,在调用完UF_PART_open函数之后,需要调用UF_PART_free_load_status函数来将该实例释放,我的代码如下:
tag_t Tag;
UF_PART_load_status_s status;
UF_PART_open(strPath,[$Tag,&status)]
UF_PART_free_load_status([$status)]
此段代码在我自己的环境中使用正常。但是考虑到用户使用的是UG NX1,无法使用UF_PART_free_load_status函数。根据UG文档,转而使用UF_free_string_array和UF_free来释放。新的代码如下:
char* val=0;
tag_t Tag;
UF_PART_load_status_s status;
UF_PART_open(strPath,[$Tag,&status)]
_itoa(*status.statuses,val,10);
UF_free_string_array(status.n_parts,status.file_names);
UF_free_string_array(status.n_parts,[$val)]
UF_free([$status)]
之所以这样写,是因为根据UG文档,UF_PART_load_status_s结构体的file_names成员是一个char**,statuses成员是一个int*,而UF_free_string_array函数接受的参数是一个int和一个char**,所以我将statuses成员用_itoa转换为一个char*,再将其引用转递给UF_free_string_array函数。我目前的问题是,在打开文件时,如果没有发生错误,则UF_PART_load_status_s结构体的file_names和statuses成员都为空,在调试到_itoa(*status.statuses,val,10)时,就会发生异常退出。请问如何在打开文件没有发生错误时,用UF_free_string_array和UF_free来释放UF_PART_load_status_s结构体的实例。请高手指点,谢谢。 |