购买与咨询 NX 二次开发视频教程,请联系微信号:13890821008 QQ号:85585969
函数结构:UF_add_callback_function( UF_callback_reason_e_t reason, UF_callback_fn_t fn, void * user_data, UF_registered_fn_p_t * function_id) 函数说明:
只要注册规定的原因被称为回调在NX发生。请注意以下几点:一旦程序被注册为一个回调,共享库它驻留在不应该被卸载,直到它被注销。回调函数必须调用UF_initialize和UF_terminate,如果它使任何Open C函数调用回调函数接收三个参数:论据1 - 之所以回调被称为参数2 - 一个指针,导致回调的一部分标记。说法3 - 用户提供的指针。通常,这将是一个数据结构的指针回调函数将需要。回调将朝着处理该结束时调用特别的原因。例如,回调注册针对创建一个新的部分时UF_create_part_reason将被调用,后几乎所有创建该新部件的过程完成。唯一的例外上面是UF_close_part_reason,为此回调将在关闭部分的开头被调用。注:对于新开的部分原因回调在同一时间运行当新创建或打开部分没有被设置为工作的一部分。同时操作,如创建零件,开放部分,保存部分或改变显示部分不应当由任何上述相同的操作的发射回调调用。
函数参数:
第1个参数为输入:
reason代表参数变量,UF_callback_reason_e_t 为输入参数类型,理由骂回调
第2个参数为输入:
fn代表参数变量,UF_callback_fn_t 为输入参数类型,要调用的函数。注意:此功能必须调用初始化,如果它使任何的Open C函数调用。还应该调用终止。
第3个参数为输入:
user_data代表参数变量,void * 为输入参数类型,用户数据。该指针将被传递给你的回调函数作为第三个参数。它通常将是一个结构的指针与你的回调函数将需要的信息。
第4个参数为输出:
function_id代表参数变量,UF_registered_fn_p_t * 为输出参数类型,标识使用去除回调
UF_add_callback_function函数实例代码演示:
样本程序后者建立一个回调。
[quote]
#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
#define ECHO(X) (printf("\t%s = %d\n", #X, X))
static int report_error( char *file, int line, char *call, int irc)
{
if (irc)
{
char
err[133],
messg[300];
UF_get_fail_message(irc, err);
sprintf(messg, "\n%s\nerror %d at line %d in %s\n%s",
err, irc, line, file, call);
printf("%s\n", messg);
if (strlen(messg) > 300)
printf("Error is too long - memory overwrite occurred!\n");
strcpy(&messg[129], "...");
uc1601(messg, TRUE); /* Internal only - remove for external */
}
return(irc);
}
static void my_open_callback(UF_callback_reason_e_t reason,
const void *application_data, void *user_data)
{
const tag_p_t
part = (tag_p_t)application_data;
char
part_name[MAX_FSPEC_SIZE+1];
/* Note that this function needs to call UF_initialize()
This requirement was added in V16.
*/
if (UF_CALL(UF_initialize())) return;
UF_PART_ask_part_name(*part, part_name);
uc1601(part_name, TRUE);
UF_terminate();
}
static UF_registered_fn_p_t function_id;
void ufusr(char *param, int *retcode, int paramLen)
{
if (UF_CALL(UF_initialize())) return;
if (!UF_CALL(UF_add_callback_function(UF_open_part_reason,
my_open_callback, NULL, &function_id)))
uc1601("Added callback", TRUE);
UF_terminate();
}
int ufusr_ask_unload(void)
{
return (UF_UNLOAD_SEL_DIALOG);
}
void ufusr_cleanup(void)
{
if (!UF_CALL(UF_remove_callback_function(function_id)))
uc1601("Removed callback", TRUE);
}
[/quote]