gpt4 book ai didi

c++ - 将新字符串添加到 MFC 组合框时触发断言

转载 作者:行者123 更新时间:2023-11-28 02:55:56 25 4
gpt4 key购买 nike

我正在测试一个旧的 MFC 应用程序,当在 Debug模式下运行时,断言总是在尝试向组合框添加新元素时触发。

我不太了解 MFC 但我看到在添加元素之前,调用了 DoDataExchange 并且可能在这里初始化了组合框?

DDX_Control(pDX, IDC_BAUDRATE, m_comboBaudRate);

然后,在执行此操作时在 OnInitDialog 中:

m_comboBaudRate.AddString((CString)port[0]);

这个断言被触发:

_AFXWIN_INLINE int CComboBox::AddString(LPCTSTR lpszString)
{
ASSERT(::IsWindow(m_hWnd));
.........................
}

任何人都知道为什么会这样,我有什么解决方案来解决这个问题?

编辑:添加 OnInitDialog 代码:

CDialogMgr::OnInitDialog();
//set the window text from message table
SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_CAPTION));

///Adding data from message table
m_btnOk.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_OK));
m_btnHelp.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_HELP));
m_btnCancel.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_BTN_CANCEL));

m_staticDeviceId.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_DEVICEID));
m_staticComPort.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_COMPORT));
m_staticBaudRate.SetWindowText(theApp.GetAtlasCaptionOrMsg(IDD_PCCONFIGURATION_BAUDRATE));


//For com port
TCHAR PortName[MAX_PORT_NO+1][MAX_COMPORT_STR_LEN]={0};
int portCount=0;
int NoPort=searchComPort(PortName);
if(NoPort==0)
{
AfxMessageBox(theApp.GetAtlasCaptionOrMsg(IDD_MSG_COMPORTNOTFOUND));
EndDialog(IDCANCEL);
return FALSE;
}
else
{
//For adding the com port in the combo box
while(PortName[portCount][0]!=0)
{
m_comboComPort.AddString(PortName[portCount]);
portCount++;
}
}

//For Adding baud rate
int iBaudRateInd=0;
char BaudRate[80];
CComBSTR ccmbstrBaudRate[10];

theApp.GetProductObject()->getBaudRate(&ccmbstrBaudRate[0]);
wcstombs(BaudRate,ccmbstrBaudRate[0],80);
char port[5][6];
int j;
int i;
for( i=0;i<5;i++)
for(j=0;j<6;j++)
port[i][j]='\0';
i=0;
j=0;

while(BaudRate[i]!=',')
{
port[0][j]=BaudRate[i];
i++;
j++;
}
i++;
j=0;
iBaudRateInd++;
m_comboBaudRate.AddString((CString)port[0]);

while(BaudRate[i]!=',')
{
port[1][j]=BaudRate[i];
i++;
j++;
}
i++;

iBaudRateInd++;
m_comboBaudRate.AddString((CString)port[1]);
j=0;
while(BaudRate[i]!=',')
{
port[2][j]=BaudRate[i];
i++;
j++;
}
i++;

iBaudRateInd++;
m_comboBaudRate.AddString((CString)port[2]);
j=0;
while(BaudRate[i]!=',')
{
port[3][j]=BaudRate[i];
i++;
j++;

if(BaudRate[i]=='\0')
break;
}

iBaudRateInd++;
m_comboBaudRate.AddString((CString)port[3]);

if(BaudRate[i]!='\0')
{
i++;
j=0;

while(BaudRate[i]!=',')
{
port[4][j]=BaudRate[i];
i++;
j++;
if(BaudRate[i]=='\0')
break;

}

iBaudRateInd++;
m_comboBaudRate.AddString((CString)port[4]);

}

GetPrivateProfileString("RS232_2","BaudRate","9600",BaudRate,sizeof(BaudRate),CONFIG_GENERIC_INI);

char ComPort[10];
GetPrivateProfileString("RS232_2","COMPort","COM1",ComPort,sizeof(ComPort),CONFIG_GENERIC_INI);

int indexBaudRate=m_comboBaudRate.FindString(-1,(CString)BaudRate);

m_comboBaudRate.SetCurSel(indexBaudRate);

int indexComPort=m_comboComPort.FindString(-1,(CString)ComPort);
m_comboComPort.SetCurSel(indexComPort);

//Getting the default value
char DeviceID[10];
GetPrivateProfileString("Secs1_1","DeviceId","251",DeviceID,sizeof(DeviceID),CONFIG_GENERIC_INI);
GetPrivateProfileString("SecsII_1","DeviceId","251",DeviceID,sizeof(DeviceID),CONFIG_GENERIC_INI);
m_lDeviceId=atoi(DeviceID);

UpdateData(false);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

最佳答案

您不会在 OnInitDialog 中从父类调用 OnInitDialog。添加 CDialog::OnInitDialog() 作为 OnInitDialog 中的第一行。 (我假设您的对话框继承自 CDialog)。

关于c++ - 将新字符串添加到 MFC 组合框时触发断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21991662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com