参数遍历,值获取
主要函数
官方文档可查看具体使用方法
ProParameterVisit
ProMdlCurrentGet
ProMdlToModelitem
ProParameterValueGet
代码
访问动作函数
ProParameterVisit 函数会遍历访问模型的参数,通过过滤函数进行跳过筛选,通过动作函数进行想要的操作。
//参数访问动作函数定义
ProError ParameterActionFn(ProParameter *param,ProError status ,ProAppData app_data ) {
//获取app_data 的地址
ProArray* p_array;
p_array = (ProArray*)(ProParameter**)app_data;
//给数组赋值,添加
ProArrayObjectAdd(p_array, -1, 1, param);
return PRO_TK_NO_ERROR;
}
入口函数
void ParamsGet() {
ProError status;
ProParameter *p_data;
ProStringToWstring(msgfil, (char*)MSGFIL);
ProCharLine sdf;
ParametersGet(&p_data);
//遍历获取参数值
ProParamvalue pvalue;
int n;
ProArraySizeGet(p_data, &n);
for (int i= 0;i<n;i++)
{
AfxMessageBox((p_data+i)->id);
ProParameterValueGet(p_data + i, &pvalue);
status = ProMessageDisplay(msgfil, (char*)"TEST String: %0s", pvalue.value.s_val);
AfxMessageBox(pvalue.value.s_val);
}
//修改参数的值
ProWstringToString(sdf, L"ok");
ProStringToWstring(pvalue.value.s_val, sdf);
ProParameterValueSet(p_data + 3, &pvalue);
}
从当前模型获取参数列表
ProError ParametersGet(ProParameter** p_data) {
ProMdl model;
ProModelitem modelitem;
// 获取当前模型
ProError status;
status= ProMdlCurrentGet(&model);
if(status!= PRO_TK_NO_ERROR){
AfxMessageBox(_T("当前不存在模型"));
return status;
}
ProMdlToModelitem(model, &modelitem);
//分配内存?什么时候
ProArrayAlloc(0, sizeof(ProParameter), 1, (ProArray*)p_data);
//调用访问函数,获取参数
status= ProParameterVisit(&modelitem, NULL, ParameterActionFn, p_data);
return status;
}