int WDCOMnum_val,DYCOMnum_val;
char WDCOM_lab[10]="com6",DYCOM_lab[10]="com8";
void GetCtrlValue()
{
GetCtrlVal(csszPanel,CSSZ_PANEL_WDCOM,&WDCOMnum_val);
GetCtrlVal(csszPanel,CSSZ_PANEL_DYCOM,&DYCOMnum_val);
}
void SetCtrlValue()
{
SetCtrlVal(csszPanel,CSSZ_PANEL_WDCOM,WDCOMnum_val);
SetCtrlVal(csszPanel,CSSZ_PANEL_DYCOM,DYCOMnum_val);
}
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "界面1.0.uir", PANEL)) < 0)
return -1;
if ((csszPanel = LoadPanel (0, "界面1.0.uir", CSSZ_PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
int CVICALLBACK CSSZ_callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
if ((csszPanel = LoadPanel (0, "界面1.0.uir", CSSZ_PANEL)) < 0)
return -1;
DisplayPanel(csszPanel);
int ret=0;
IniText ReadIniFileHandle;
ReadIniFileHandle = Ini_New(TRUE);
ret = Ini_ReadFromFile(ReadIniFileHandle,"date.ini");
if(ret==0)//读取文件成功
{
Ini_GetInt(ReadIniFileHandle,"CSSZ","WDCOM",&WDCOMnum_val);
Ini_GetInt(ReadIniFileHandle,"CSSZ","DYCOM",&DYCOMnum_val);
SetCtrlValue();
}
Ini_Dispose(ReadIniFileHandle);
break;
}
return 0;
}
int CVICALLBACK LJCK_callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int WDCOMnum_val=0,DYCOMnum_val=0;
char WDCOM_lab[10]="com6",DYCOM_lab[10]="com8";
int bod=9600;
switch (event)
{
case EVENT_COMMIT:
//int WDCOMnum_val=0;
int ret=0;
IniText ReadIniFileHandle;
ReadIniFileHandle = Ini_New(TRUE);
ret = Ini_ReadFromFile(ReadIniFileHandle,"date.ini");
if(ret==0)
{
Ini_GetInt(ReadIniFileHandle,"CSSZ","WDCOM",&WDCOMnum_val);
Ini_GetInt(ReadIniFileHandle,"CSSZ","DYCOM",&DYCOMnum_val);
SetCtrlValue();
}
Ini_Dispose(ReadIniFileHandle);
Connectionsta[0]=0;
RS232Error = OpenComConfig (WDCOMnum_val,WDCOM_lab, bod, 0, 8, 1, 512, 512);
if (RS232Error == 0)
{
com[1]=WDCOMnum_val;
SetComTime (WDCOMnum_val,0.3);
Connectionsta[1]=1;
SetCtrlVal(panelHandle,PANEL_WD_LED,1);
}
break;
}
return 0;
}
在最下面LJCK这部分的运行时会提示开头的setctrlval出错
Function SetCtrlValAnsi: (return value = -4 [Oxfffffffc]).Panel, menu bar, or control array handle is invalid
根据你提供的代码,可以看出可能存在如下问题:
panelHandle
没有被正确初始化。在 main
函数中加载 PANEL
面板后,应该将其存储在 panelHandle
变量中并显示出来,例如:panelHandle = LoadPanel (0, "界面1.0.uir", PANEL);
if (panelHandle < 0)
return -1;
DisplayPanel (panelHandle);
SetCtrlVal
函数的第一个参数应该是控件的句柄,而不是控件的标识符。在 LJCK_callback
函数中,你应该先获取控件的句柄,例如:int wd_led_handle = GetCtrlHandleFromPanel(panelHandle, PANEL_WD_LED);
然后将 wd_led_handle
作为参数传递给 SetCtrlVal
函数,例如:
SetCtrlVal(panelHandle, wd_led_handle, 1);
LJCK_callback
函数中,你定义了两个局部变量 WDCOMnum_val
和 DYCOMnum_val
,这会隐藏全局变量 WDCOMnum_val
和 DYCOMnum_val
,导致后面的代码中使用的是局部变量而非全局变量。因此,你应该删除这两个局部变量的定义,保留全局变量即可。希望这些解释能够帮助你解决问题。