“LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 3 从“BYTE *”转换为“const BYTE”
附代码:
BYTE *DataMarking = NULL;
DataMarking = momery.safe_malloc(2);
DataMarking[0] = 0xc0;
DataMarking[1] = 0x10;
WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, DataMarking, Data);
Writemeter代码:
bool LiFei_SendCom::CSendPort::WriteMeter
(
CString &strMeterNo,
CString &strPassWord,
vector<BYTE> &Data_Marking,
vector<BYTE>& Data
)
{
try
{
const int MeterNONumber = 12; //电表
while (strMeterNo.GetLength() != MeterNONumber)
{
strMeterNo = '0' + strMeterNo;
}
StrCovertToHexByte(strMeterNo, m_MeterNo);
StrCovertToHexByte(strPassWord, m_PassWord); PRINT_ELEMENTS( m_MeterNo, "m_MeterNo: ");
PRINT_ELEMENTS( m_PassWord, "m_PassWord: "); std::copy( Data_Marking.begin(), Data_Marking.end(),
std::back_inserter( m_DataMarking ) );
std::copy( Data.begin(), Data.end(),
std::back_inserter( m_Data) );
PRINT_ELEMENTS( m_DataMarking, "m_DataMarking: ");
PRINT_ELEMENTS( m_Data, "m_Data: ");
//整理成数据
WriteDataHandle();
//发送数据
SentToMeter(); //检测接收数据,并返回电表内数据
DivideReceiveData();
}
catch (CString error)
{
AfxMessageBox( error); return false;
}
return 1;
}另外还有N多的这种警告d:\ce_work\senddata\senddataview.h(35) : warning C4995: “CDaoDatabase”: 名称被标记为 #pragma deprecated
附代码:
BYTE *DataMarking = NULL;
DataMarking = momery.safe_malloc(2);
DataMarking[0] = 0xc0;
DataMarking[1] = 0x10;
WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, DataMarking, Data);
Writemeter代码:
bool LiFei_SendCom::CSendPort::WriteMeter
(
CString &strMeterNo,
CString &strPassWord,
vector<BYTE> &Data_Marking,
vector<BYTE>& Data
)
{
try
{
const int MeterNONumber = 12; //电表
while (strMeterNo.GetLength() != MeterNONumber)
{
strMeterNo = '0' + strMeterNo;
}
StrCovertToHexByte(strMeterNo, m_MeterNo);
StrCovertToHexByte(strPassWord, m_PassWord); PRINT_ELEMENTS( m_MeterNo, "m_MeterNo: ");
PRINT_ELEMENTS( m_PassWord, "m_PassWord: "); std::copy( Data_Marking.begin(), Data_Marking.end(),
std::back_inserter( m_DataMarking ) );
std::copy( Data.begin(), Data.end(),
std::back_inserter( m_Data) );
PRINT_ELEMENTS( m_DataMarking, "m_DataMarking: ");
PRINT_ELEMENTS( m_Data, "m_Data: ");
//整理成数据
WriteDataHandle();
//发送数据
SentToMeter(); //检测接收数据,并返回电表内数据
DivideReceiveData();
}
catch (CString error)
{
AfxMessageBox( error); return false;
}
return 1;
}另外还有N多的这种警告d:\ce_work\senddata\senddataview.h(35) : warning C4995: “CDaoDatabase”: 名称被标记为 #pragma deprecated
强制转换下就好了
d:\ce_work\senddata\settingtime.cpp(238) : error C2664: “LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 4 从“BYTE *”转换为“const BYTE *&”
转换丢失限定符
参数3没有错了BYTE *Data = NULL; //储存发送数据
Data = momery.safe_malloc(4);
Data[0] = SendCom.IntToBcd(Year);
Data[1] = SendCom.IntToBcd(Month);
Data[2] = SendCom.IntToBcd(Day);
Data[3] = SendCom.IntToBcd(Week);
这是调WirterSuccess = SendCom.WriteMeter(strMeterNo, strPassWord, (const BYTE)DataMarking, Data); 的Data
error C2664: “LiFei_SendCom::CSendCom::WriteMeter”: 不能将参数 4 从“BYTE”转换为“const BYTE *&”
这是也在参数4前也加const BYTE的错误
bool LiFei_SendCom::CSendCom::WriteMeter
(
CString &MeterNo,
const CString &PassWord,
const BYTE DataMarking,
const BYTE Data
)
{
//CString的电表号和密码转化成字节
CString strError;
const int MeterNONumber = 12; //电表号
while (MeterNo.GetLength() != MeterNONumber)
{
MeterNo = '0' + MeterNo;
}
const int PassWordNumber = (PassWord.GetLength())/2; //密码
m_PassWordNumber = PassWordNumber; //获取密码字节长度 m_PassWord = momery.safe_malloc(PassWordNumber);
m_MeterNo = momery.safe_malloc(MeterNONumber/2);
m_MeterNoNumber = MeterNONumber/2; //获取电表号的字节长度
//转化成字
StrCovertToHexByte(MeterNo, m_MeterNo);
StrCovertToHexByte(PassWord, m_PassWord); //初始化数据标识
try
{
//初始化数据标识和发送数据
InitalData(&DataMarking, m_DataMarkingNumber, m_DataMarking);
InitalData(&Data, m_DataNumber, m_Data);
//获取数据标识,用于校验
m_HightDataMarking = *m_DataMarking;
m_LowDataMarking = *(m_DataMarking + 1);
//整理成数据
WriteDataHandle();
//发送数据
SentToMeter(); //检测接收数据,并返回电表内数据
DivideReceiveData(); }
catch (CString error)
{
AfxMessageBox( error); return false;
} return true;
}