鱼C论坛

 找回密码
 立即注册
查看: 1441|回复: 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 处
最佳答案
2024-9-1 17:21:56


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

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

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

以下是一个改进的版本:

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

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

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

  12.         // 显示读取的数据
  13.         MessageBox(str);
  14.     }
  15. }
复制代码


确保 `PLCRdata` 定义如下:

  1. int PLCRdata[2];  // 示例定义,确保容纳从 ReadDeviceRandom 读取的两个整数
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
IMG_6651.jpeg
IMG_6650.jpeg

最佳答案

查看完整内容

理解了。感谢你的耐心。让我们一步一步来检查和改正。 1. **检查 `PLCRdata` 的定义:** 确认 `PLCRdata` 是一个数组,并且有足够的空间存储读取的数据。 2. **修正格式化输出:** 需要从数组中提取数据进行格式化。 以下是一个改进的版本: 确保 `PLCRdata` 定义如下: **注意:** 请确认 `ReadDeviceRandom` 确实是按这种方式工作,并且第三个参数确实是一个数组。 希望这次能解决你的问题。如果 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-9-1 17:21:56 | 显示全部楼层    本楼为最佳答案   


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

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

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

以下是一个改进的版本:

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

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

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

  12.         // 显示读取的数据
  13.         MessageBox(str);
  14.     }
  15. }
复制代码


确保 `PLCRdata` 定义如下:

  1. int PLCRdata[2];  // 示例定义,确保容纳从 ReadDeviceRandom 读取的两个整数
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

这里是修正后的代码:

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

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

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

  11.         // 这里直接使用str变量,而不是_T("str")
  12.         MessageBox(str);
  13.     }
  14. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://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);
        }
}

\\更改后还是错误
小甲鱼最新课程 -> https://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. 修正字符串拼接部分。

修改后的代码如下:

  1. // 假设 PLCRdata 是一个长度为 2 的数组
  2. int PLCRdata[2];

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

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

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

  13.         // 这里直接使用str变量
  14.         MessageBox(str);
  15.     }
  16. }
复制代码


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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

还是报错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 09:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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