topguntoo 2023-02-24 21:43 采纳率: 44.4%
浏览 63
已结题

MFC子窗口调用 父窗口 编译通过运行出错,求看看什么问题

父窗口是 ETXTV23Dlg.cpp和ETXTV23Dlg.h
子窗口是 Tab_Data_DCData.cpp和Tab_Data_DCData.h

父窗口里有个函数

void CETXTV23Dlg::MSCommSend(unsigned char * data, unsigned int len)
{
    CByteArray array; //定义一个字节集
    array.RemoveAll(); //清空数组
    if (0 != len)
    {
        array.SetSize(len); //设定数组长度
                            //将发送数据写入到临时数组
        for (UINT i = 0; i < len; i++)
        {
            array.SetAt(i, *data++);
        }
        //调用mscomm发送数据,COleVariant类自查百度吧
        m_MsComm.put_Output(COleVariant(array));
    }
}

在子窗口里有个按钮要调用这个串口发动函数

void Tab_Data_DCData::OnBnClickedButtonMcutopc()//从终端读取数据
{
    // TODO: 在此添加控件通知处理程序代码
    CETXTV23Dlg *pDlg = (CETXTV23Dlg*)this->GetParent();
    int i=0;
    sendBuf1[i++] = 1;
    sendBuf1[i++] = 2;
    sendBuf1[i++] = 3;
    sendBuf1[i++] = 4;
    sendBuf1[i++] = 5;
    sendBuf1[i++] = 6;
    sendBuf1[i++] = 7;
    sendBuf1[i++] = 8;
    pDlg->MSCommSend(sendBuf1,8);
}

这样编译能通过 运行到这报错,大虾帮我看看

img

  • 写回答

5条回答 默认 最新

  • zzwwtyyds 2023-02-24 21:55
    关注

    根据您提供的错误信息,可以看出是由于子窗口调用父窗口的函数时,无法找到父窗口指针而导致的错误。这可能是因为您的子窗口并没有正确获取父窗口指针。

    在您的代码中,您使用了以下代码来获取父窗口指针:

    CETXTV23Dlg *pDlg = (CETXTV23Dlg*)this->GetParent();
    
    
    

    这个方法是获取当前窗口的父窗口指针。但是,如果当前窗口并不是直接嵌套在父窗口中,而是通过其他窗口嵌套进来的,那么这个方法可能会返回一个错误的指针。

    为了解决这个问题,您可以尝试使用以下方法来获取父窗口指针:

    CETXTV23Dlg *pDlg = (CETXTV23Dlg*)AfxGetMainWnd();
    
    
    

    这个方法可以获取主窗口的指针,即您的父窗口的指针。请尝试修改您的代码并使用这个方法来获取父窗口指针,并重新编译和运行程序。如果问题仍然存在,请提供更多的错误信息以便我们更好地帮助您解决问题。
    引用gpt

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 赞助了问题酬金15元 2月24日
  • 创建了问题 2月24日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来