MFC点击控件后报警类型不匹配
void CFX3UDlg::OnBnClickedButton2(){
// TODO: 在此添加控件通知处理程序代码
CString str,str1,str2;
if (m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata ) == 0x00)
{
str1.Format(_T("%d"), PLCRdata);
str2.Format(_T("%d"), PLCRdata);
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 处 鱼油,你好!你提到的这个报警类型不匹配问题是由于 `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);
str2.Format(_T("%d"), PLCRdata);
str = str1 + _T(",") + str2;
// 这里直接使用str变量,而不是_T("str")
MessageBox(str);
}
}
总结:
1. `MessageBox()` 传参时直接使用字符串变量。
2. 确保 `PLCRdata` 是数组并正确访问数组元素。
希望这个解释对你有所帮助!如果你还有其他问题,随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 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);
str2.Format(_T("%d"), PLCRdata);
str = str1 + _T(",") + str2;
MessageBox(str);
}
}
\\更改后还是错误 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;
void CFX3UDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
CString str, str1, str2;
if (m_FXPLC.ReadDeviceRandom(_T("D50\nD60"), 2, PLCRdata) == 0x00)
{
// 获取数组中的每个数据
str1.Format(_T("%d"), PLCRdata);
str2.Format(_T("%d"), PLCRdata);
str = str1 + _T(",") + str2;
// 这里直接使用str变量
MessageBox(str);
}
}
请确认 `PLCRdata` 的声明和定义是否正确,并确保传入的数组大小与 `ReadDeviceRandom` 函数期望的一致。上述代码假设 `PLCRdata` 是一个长度为 2 的 `int` 数组,并且在 `ReadDeviceRandom` 函数中正确填充数据。
如果你仍然遇到问题,请检查 `ReadDeviceRandom` 函数的具体实现和参数是否正确传递。希望这次能解决你的问题!有问题继续留言。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-9-1 17:30
明白了,问题可能是由于 `PLCRdata` 的使用不当引起的。通常,`ReadDeviceRandom` 函数的第三个参数可 ...
还是报错 Maxiangwang 发表于 2024-09-01 18:14
还是报错
理解了。感谢你的耐心。让我们一步一步来检查和改正。
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);
str2.Format(_T("%d"), PLCRdata);
// 拼接字符串
str = str1 + _T(",") + str2;
// 显示读取的数据
MessageBox(str);
}
}
确保 `PLCRdata` 定义如下:
int PLCRdata;// 示例定义,确保容纳从 ReadDeviceRandom 读取的两个整数
**注意:** 请确认 `ReadDeviceRandom` 确实是按这种方式工作,并且第三个参数确实是一个数组。
希望这次能解决你的问题。如果还有其他问题,随时问我!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]