神农藏百草 2018-08-02 01:26 采纳率: 0%
浏览 2319
已采纳

不能将参数 2 从“char [260]”转换为“LPWSTR” 在线等

        老哥们,麻烦帮忙改改,小弟实在是搞不懂这些东西。下面贴出代码

            //#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;
}

麻烦各位老哥帮个忙,错误的地方我已经标出来了,应该就是转换的问题,拜托了

  • 写回答

2条回答 默认 最新

  • 白色一大坨 2018-08-02 01:46
    关注

    应该是用了宽字符造成的,可以在工程内设置为使用多字节字符集:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流