100分,一个串口接收的有关问题

100分求助,一个串口接收的问题
C/C++ code
    bool m_OpenStatus;
bool m_CloseStatus;
bool m_OneKeyDown;
bool m_OneKeyCancel;
bool m_Expose;
bool m_ExposeComplete;
CString  m_KV;
CString  m_MA;
CString  m_S;

CString strTemp = "";
extern "C"__declspec(dllexport)void SetZoneBuffer()
{
    strTemp ="";
}


extern "C" __declspec(dllexport)bool GetOpenStatus()
{
   return m_OpenStatus;
}
extern "C" __declspec(dllexport)bool GetCloseStatus()
{
    return m_CloseStatus;
}
extern "C" __declspec(dllexport)int GetKV()
{
    return atoi(m_KV);
}
extern "C" __declspec(dllexport)int GetMA()
{
    return atoi(m_MA);
}
extern "C" __declspec(dllexport)int GetS()
{
    return atoi(m_S);
}
extern "C" __declspec(dllexport)bool GetOneKeyDown()
{
    return m_OneKeyDown;
}

extern "C" __declspec(dllexport)bool GetOneKeyCancel()
{
    return m_OneKeyCancel;
}
extern "C" __declspec(dllexport)bool GetExpose()
{
    return m_Expose;
}
extern "C" __declspec(dllexport)bool GetExposeComplete()
{
    return m_ExposeComplete;
}

void ReveveChar(WPARAM data, LPARAM port)
{
    
    char str[1] = "";
//    sprintf(str,"%c",data);

    strTemp += str;

    if (strTemp.Find("POK"))
    {
        m_OpenStatus = true;
    }
    else
    {
        m_OpenStatus = false;
    }
    if (strTemp.Find("POF"))
    {
        m_CloseStatus = true;
    } 
    else
    {
        m_CloseStatus = false;
    }
    if (strTemp.Find("KV") && strTemp.GetLength()>=5)
    {
        m_KV = strTemp.Left(5);
        m_KV = m_KV.Right(2);
    }

    if (strTemp.Find("MA") && strTemp.GetLength()>=11)
    {
        m_MA = strTemp.Left(11);
        m_MA = m_MA.Right(2);
    }
    if (strTemp.Find("MX") && strTemp.GetLength()==17)
    {
    //    m_S = strTemp.Left(11);
        m_S = m_S.Right(2);
    }
    if (strTemp.Find("PRY"))
    {
        m_OneKeyDown=true;
    }
    else
    {
        m_OneKeyDown=false;
    }

    if (strTemp.Find("PRN"))
    {
        m_OneKeyCancel= true;
    }
    else
    {
        m_OneKeyCancel = false;
    }
    if (strTemp.Find("XRY"))
    {
        m_Expose = true;
    }
    else
    {
        m_Expose = false;
    }

    if (strTemp.Find("XRY"))
    {
        m_Expose = true;
    }
    else
    {
        m_Expose = false;
    }

    if (strTemp.Find("XRN"))
    {
        m_ExposeComplete= true;
    } 
    else
    {
        m_ExposeComplete = false;
    }



        
}

extern "C" __declspec(dllexport) void OpenMachnie()
{
    if (Init(9,9600,'N',8,1))
    {
       char pon [4]= {'P','O','N',13};
       SendData(&pon[0],sizeof(char)*1);
       Sleep(20);
       SendData(&pon[1],sizeof(char)*1);
       Sleep(20);
       SendData(&pon[2],sizeof(char)*1);
       Sleep(20);
       SendData(&pon[3],sizeof(char)*1);
       Sleep(20);

       char rfr [4]= {'R','F','R',13};
       SendData(&rfr[0],sizeof(char)*1);
       Sleep(20);
       SendData(&rfr[1],sizeof(char)*1);
       Sleep(20);
       SendData(&rfr[2],sizeof(char)*1);
       Sleep(20);
       SendData(&rfr[3],sizeof(char)*1);
       SetReceiveFuntion(&ReveveChar);
      
    }
    else
    {
        AfxMessageBox("初始化失败\r\n 1、串口被占用\r\n 2、检查COM9是否选择正确");
    }
    
}

extern "C" __declspec(dllexport) void CloseMachine()
{
       char pof [4]= {'P','O','F',13};
       SendData(&pof[0],sizeof(char)*1);
       Sleep(20);
       SendData(&pof[1],sizeof(char)*1);
       Sleep(20);
       SendData(&pof[2],sizeof(char)*1);
       Sleep(20);
       SendData(&pof[3],sizeof(char)*1);
}

extern "C" __declspec(dllexport) void AddKV()
{
       char addkv [4]= {'K','V','+',13};
       SendData(&addkv[0],sizeof(char)*1);
       Sleep(20);
       SendData(&addkv[1],sizeof(char)*1);
       Sleep(20);
       SendData(&addkv[2],sizeof(char)*1);
       Sleep(20);
       SendData(&addkv[3],sizeof(char)*1);
}

extern "C" __declspec(dllexport) void SubtractKV()
{
       char subtractkv [4]= {'K','V','-',13};
       SendData(&subtractkv[0],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractkv[1],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractkv[2],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractkv[3],sizeof(char)*1);
}

extern "C" __declspec(dllexport) void AddMA()
{
       char addma [4]= {'M','A','+',13};
       SendData(&addma[0],sizeof(char)*1);
       Sleep(20);
       SendData(&addma[1],sizeof(char)*1);
       Sleep(20);
       SendData(&addma[2],sizeof(char)*1);
       Sleep(20);
       SendData(&addma[3],sizeof(char)*1);
}


extern "C" __declspec(dllexport) void SubtractMA()
{
       char subtractma [4]= {'M','A','-',13};
       SendData(&subtractma[0],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractma[1],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractma[2],sizeof(char)*1);
       Sleep(20);
       SendData(&subtractma[3],sizeof(char)*1);
}


extern "C" __declspec(dllexport) void AddS()
{
       char adds [4]= {'M','X','+',13};
       SendData(&adds[0],sizeof(char)*1);
       Sleep(20);
       SendData(&adds[1],sizeof(char)*1);
       Sleep(20);
       SendData(&adds[2],sizeof(char)*1);
       Sleep(20);
       SendData(&adds[2],sizeof(char)*1);
       Sleep(20);
       SendData(&adds[3],sizeof(char)*1);
}


extern "C" __declspec(dllexport) void SubtractS()
{
    char subtracts [4]= {'M','X','-',13};
       SendData(&subtracts[0],sizeof(char)*1);
       Sleep(20);
       SendData(&subtracts[1],sizeof(char)*1);
       Sleep(20);
       SendData(&subtracts[2],sizeof(char)*1);
       Sleep(20);
       SendData(&subtracts[2],sizeof(char)*1);
       Sleep(20);
       SendData(&subtracts[3],sizeof(char)*1);
}