老哥们,麻烦帮忙改改,小弟实在是搞不懂这些东西。下面贴出代码
//#include <cstringt.h>
#include "../NetWork/stdafx.h"
#include "hsDataThreadFun.h"
#include "hsData.h"
#include <queue>
#include "../NetWork/NetWork_Include/MetroException.h"
#pragma comment(lib, "..\Lib\ShutDown.lib")
extern "C" __declspec(dllexport) void __stdcall ShutdownWindows();
extern HWND g_hMain;
//DataThreadFun DataTemp; //这个对象是为了解决 结构不匹配问题
DataThreadFun::DataThreadFun(){
m_NetWork.Init();
char lpFile[MAX_PATH] = {0}; //初始化界面文件的路径
////////////前三个错误地点
GetPathExe(lpFile,_T("MAX_PATH")); ///////////////////
strcat(lpFile,_T("\Config\Init.ini"));
CIniFile Init(lpFile);
if(!Init.IsExistFile()){
CString str;
str.Format(_T("初始化配置文件:%s 不存在"), lpFile);
//throw CNetworkException(str);
MessageBox(NULL,str,_T("读文件"),NULL);
}
//读取文件内容
m_CarID = Init.ReadString(_T("Init"),_T("CarID"),0);
m_NowSpeed = Init.ReadString(_T("Init"),_T("当前车速"),0);
m_MaxSpeed = Init.ReadString(_T("Init"),_T("最大车速"),0);
m_OperSty = Init.ReadString(_T("Init"),_T("运营类型"),0);
m_DriverID = Init.ReadString(_T("Init"),_T("司机ID"),0);
m_TheLine= Init.ReadString(_T("Init"),_T("线路"),0);
m_DriverIDLastTime = Init.ReadString(_T("Init"),_T("上一次工号"),0);
m_Picture = Init.ReadString(_T("Init"),_T("预览画面"),0);
m_hThread = nullptr;
m_SverStaBol = FALSE;
m_bInit = TRUE;
m_PoweOff = FALSE;
memset(&m_StaDoor,0,sizeof(m_StaDoor));
m_bRun = TRUE;
}
DataThreadFun::~DataThreadFun(){
//把数据写回配置文件
char lpFile[MAX_PATH] = {0}; //初始化界面文件的路径
////////////48,49,50行错误
GetPathExe(lpFile,MAX_PATH);
strcat(lpFile,_T("\\Config\\Init.ini"));
CIniFile Init(lpFile);
if(!Init.IsExistFile()){
CString str;
str.Format(_T("初始化配置文件:%s 不存在"), lpFile);
//throw CNetworkException(str);
MessageBox(NULL,str,_T("读文件"),NULL);
}
Init.WriteString(_T("Init"),_T("CarID"),m_CarID);
Init.WriteString(_T("Init"),_T("当前车速"),m_NowSpeed);
Init.WriteString(_T("Init"),_T("最大车速"),m_MaxSpeed);
Init.WriteString(_T("Init"),_T("运营类型"),m_OperSty);
Init.WriteString(_T("Init"),_T("司机ID"),m_DriverID);
Init.WriteString(_T("Init"),_T("线路"),m_TheLine);
Init.WriteString(_T("Init"),_T("上一次工号"),m_DriverIDLastTime);
Init.WriteString(_T("Init"),_T("预览画面"),m_Picture);
m_bRun = FALSE;
}
UINT NUMBERMSG = 0;
//把接收到的短息写到硬盘上去,门状态拿来就用
DWORD DataThreadFun::RecveData(LPVOID lParam){ //每隔一段时间就会被调用一次(接收主机发送过来的包,主机发什么不用管,接着就好,其实主机发送的就是我们请求的
//我们的请求在框架中请求),如果 在这段时间里 有还几条发送过来?就会堵到队列中?
DataThreadFun* pData = (DataThreadFun*)lParam;
char lpFile[MAX_PATH]={0};
///////////////78行错误
GetPathExe(lpFile,MAX_PATH);
CNetPacket packe;
int dID=pData->m_NetWork.GetTerminalID(_T("SERVER"));
pData->m_SverStaBol = pData->m_NetWork.IsOnline(dID);
while (pData->m_bRun)
{
Sleep(50);
if (pData->m_NetWork.Receive(dID,packe))
{
if(packe.GetParam() == REC_SorMSG){
Sleep(1000);
memcpy(&pData->m_StShortMsg,packe.GetBuffer(),sizeof(pData->m_StShortMsg));
char MsgBuff[200] = {0};
CString MsgName,MsgStr;
char lpFile[MAX_PATH]={0};
/////////////98 100行错误
GetPathExe(lpFile,MAX_PATH);
strcat(lpFile,_T("\\Config\\MSG\\"));
//将读标志 放在文件里
//以时间作为文件名
CTime SysTime = CTime::GetCurrentTime();
CString CtimeStr,SysTimeStr=SysTime.Format(_T("%Y%m%d"));
int HTemp = SysTime.GetHour();
int MmTemp = SysTime.GetMinute();
int SeTemp = SysTime.GetSecond();
CtimeStr = SysTime.Format(_T("%Y年%m月%d日 %H:%M:%S"));
/////////////////110行错误
MsgName.Format("%s%s%d%d%d.ini",lpFile,SysTimeStr,HTemp,MmTemp,SeTemp);
try
{
CFile file(MsgName, CFile::modeCreate | CFile::modeWrite); //modeReadWrite 2117
///////////////115行错误
MsgStr.Format("[MSG]\r\nfalg=%d\r\nAttribute=%d\r\nmsg=%s\r\nTime=%s",pData->m_StShortMsg.SoMsFlag,pData->m_StShortMsg.Attribute,pData->m_StShortMsg.MSG,CtimeStr);
file.Write(MsgStr,MsgStr.GetLength());
file.Close();
}
catch (CMemoryException* e)
{
}
catch (CFileException* e)
{
// e-> ReportError();
}
catch (CException* e)
{
}
}else if(REC_LINE == packe.GetParam()){
//接收站信息,主机会发送一个文件包(要不要检测本地有没有站信息,有就不要下载了,如果线路更新怎么办?)
//strcat(lpFile,_T("\\Config\\"));
}else if(REC_STADOOR == packe.GetParam()){
memcpy(pData->m_StaDoor,packe.GetBuffer(),sizeof(pData->m_StaDoor));
}else if(REC_MaxSpeed == packe.GetParam()){
double* dLimiteSpeed = (double*)packe.GetBuffer();
pData->m_MaxSpeed.Format(_T("%.1f"), *dLimiteSpeed);
}else if(REC_NowSpeed == packe.GetParam()){
double* pSpeed = (double*)packe.GetBuffer();
pData->m_NowSpeed.Format(_T("%.1f"), *pSpeed);
}else if(REC_StalCar == packe.GetParam()){
struct sta{
BYTE temper[10];
BYTE guest[10];
BYTE oil[10];
BYTE Meliage[20];
}stat;
memcpy(&stat,packe.GetBuffer(),sizeof(stat));
pData->m_temperatureDoor = stat.temper;
pData->m_guestNumber = stat.guest;
pData->m_oil = stat.oil;
pData->m_Meliage = stat.Meliage;
}else if(REC_Stalcamera == packe.GetParam()){
memcpy(&pData->m_CameraState,packe.GetBuffer(),sizeof(pData->m_CameraState));
}else if(REC_BlackScreen == packe.GetParam()){
memcpy(&pData->m_bInit,packe.GetBuffer(),sizeof(pData->m_bInit));
}else if(REC_PowerOff == packe.GetParam()){
memcpy(&pData->m_PoweOff,packe.GetBuffer(),sizeof(pData->m_PoweOff));
if(pData->m_PoweOff){
//执行关机
ShutdownWindows();
}else
return 0;
}
::PostMessage(g_hMain, MSG_DATA, packe.GetParam(), NULL);
}
}
return 0;
}
bool DataThreadFun::WorkThread_Start()
{
m_hThread = ::CreateThread(NULL, 0, RecveData, this, NULL, NULL);
if (m_hThread == NULL)
{
return false;
}
return true;
}
麻烦各位老哥帮个忙,错误的地方我已经标出来了,应该就是转换的问题,拜托了