鱼C论坛

 找回密码
 立即注册
查看: 465|回复: 5

MFC点击控件后报警类型不匹配

[复制链接]
发表于 2024-9-1 17:21:55 From FishC Mobile | 显示全部楼层 |阅读模式
1鱼币
void CFX3UDlg::OnBnClickedButton2()
{
        // TODO: 在此添加控件通知处理程序代码
        CString str,str1,str2;
        if (m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata ) == 0x00)
        {
                str1.Format(_T("%d"), PLCRdata[0]);

                str2.Format(_T("%d"), PLCRdata[1]);

                str = str1 + _T(",") + str2;

                MessageBox(_T("str"));
        }
}


\\报警提示
d:\a01\_work\11\s\src\vctools\VC7Libs\Ship\ATLMFC\Src\MFC\olemisc.cpp(423) : AppMsg - Warning: constructing COleException, scode = DISP_E_TYPEMISMATCH ($80020005).
0x76AE0D72 处(位于 FX3U.exe 中)引发的异常: Microsoft C++ 异常: COleException,位于内存位置 0x004FE4A0 处

IMG_6651.jpeg
IMG_6650.jpeg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-1 17:22:04 | 显示全部楼层
鱼油,你好!你提到的这个报警类型不匹配问题是由于 `MessageBox` 函数的参数错误引起的。

在 `MessageBox` 中传递字符串变量 `str` 时,不应该添加双引号 `_T("str")`,直接传递变量即可。

另外,关于 `PLCRdata` 的格式化,有两个 `str1` 和 `str2`,但值是一样的,可能是复制粘贴或逻辑有误。

这里是修正后的代码:
void CFX3UDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    CString str, str1, str2;

    if (m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata) == 0x00)
    {
        // 假设 PLCRdata 是一个数组,并且我们要读取第一个和第二个数据
        str1.Format(_T("%d"), PLCRdata[0]);
        str2.Format(_T("%d"), PLCRdata[1]);

        str = str1 + _T(",") + str2;

        // 这里直接使用str变量,而不是_T("str")
        MessageBox(str);
    }
}

总结:
1. `MessageBox()` 传参时直接使用字符串变量。
2. 确保 `PLCRdata` 是数组并正确访问数组元素。

希望这个解释对你有所帮助!如果你还有其他问题,随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-9-1 17:30:15 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-9-1 17:22
鱼油,你好!你提到的这个报警类型不匹配问题是由于 `MessageBox` 函数的参数错误引起的。

在 `MessageB ...

void CFX3UDlg::OnBnClickedButton2()
{
        // TODO: 在此添加控件通知处理程序代码
        CString str,str1,str2;
        if(m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata ) == 0x00)
        {
                str1.Format(_T("%d"), PLCRdata[0]);

                str2.Format(_T("%d"), PLCRdata[1]);

                str = str1 + _T(",") + str2;

                MessageBox(str);
        }
}

\\更改后还是错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-1 17:30:25 | 显示全部楼层
Maxiangwang 发表于 2024-09-01 17:30
void CFX3UDlg::OnBnClickedButton2()
{
        // TODO:  ...


明白了,问题可能是由于 `PLCRdata` 的使用不当引起的。通常,`ReadDeviceRandom` 函数的第三个参数可能是一个数组或指针。因此,在格式化 `str1` 和 `str2` 时,应该分别从 `PLCRdata` 数组中获取数据。

假设 `PLCRdata` 是一个长度为 2 的数组,我们可以这样做:

1. 确保 `PLCRdata` 是一个长度为 2 的数组。
2. 修正字符串拼接部分。

修改后的代码如下:
// 假设 PLCRdata 是一个长度为 2 的数组
int PLCRdata[2];

void CFX3UDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    CString str, str1, str2;

    if (m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata) == 0x00)
    {
        // 获取数组中的每个数据
        str1.Format(_T("%d"), PLCRdata[0]);
        str2.Format(_T("%d"), PLCRdata[1]);

        str = str1 + _T(",") + str2;

        // 这里直接使用str变量
        MessageBox(str);
    }
}

请确认 `PLCRdata` 的声明和定义是否正确,并确保传入的数组大小与 `ReadDeviceRandom` 函数期望的一致。上述代码假设 `PLCRdata` 是一个长度为 2 的 `int` 数组,并且在 `ReadDeviceRandom` 函数中正确填充数据。

如果你仍然遇到问题,请检查 `ReadDeviceRandom` 函数的具体实现和参数是否正确传递。希望这次能解决你的问题!有问题继续留言。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-9-1 18:14:14 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-9-1 17:30
明白了,问题可能是由于 `PLCRdata` 的使用不当引起的。通常,`ReadDeviceRandom` 函数的第三个参数可 ...

还是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-1 18:14:21 | 显示全部楼层


理解了。感谢你的耐心。让我们一步一步来检查和改正。

1. **检查 `PLCRdata` 的定义:** 确认 `PLCRdata` 是一个数组,并且有足够的空间存储读取的数据。

2. **修正格式化输出:** 需要从数组中提取数据进行格式化。

以下是一个改进的版本:
void CFX3UDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    CString str, str1, str2;

    if(m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata) == 0x00)
    {
        // 假设 PLCRdata 是一个尺寸为 2 的数组
        str1.Format(_T("%d"), PLCRdata[0]);
        str2.Format(_T("%d"), PLCRdata[1]);

        // 拼接字符串
        str = str1 + _T(",") + str2;

        // 显示读取的数据
        MessageBox(str);
    }
}

确保 `PLCRdata` 定义如下:
int PLCRdata[2];  // 示例定义,确保容纳从 ReadDeviceRandom 读取的两个整数

**注意:** 请确认 `ReadDeviceRandom` 确实是按这种方式工作,并且第三个参数确实是一个数组。

希望这次能解决你的问题。如果还有其他问题,随时问我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表