使用CSerial类的一个有关问题,求大神速进

使用CSerial类的一个问题,求大神速进!
先给出代码吧


C/C++ code

#define STRICT
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <Serial.h>

int ShowError (LONG lError, LPCTSTR lptszMessage)
{
    TCHAR tszMessage[256];
    wsprintf(tszMessage,_T("%s\n(error code %d)"), lptszMessage, lError);

    ::MessageBox(0,tszMessage,_T("Listener"), MB_ICONSTOP|MB_OK);
    return 1;
}

int __cdecl _tmain (int /*argc*/, char** /*argv*/)
{
    CSerial serial;
    LONG    lLastError = ERROR_SUCCESS;

    lLastError = serial.Open(_T("COM4"),0,0,true);
//就是这个地方,可不可以实现执行程序的时候,先给一个printf("请输入COM口"),然后记录下来,再到这里使用?
    if (lLastError != ERROR_SUCCESS)
        return ::ShowError(serial.GetLastError(), 
                _T("Unable to open COM-port"));

    lLastError = serial.Setup(
                CSerial::EBaud9600,
                CSerial::EData8,
                CSerial::EParNone,
                CSerial::EStop1);

    if (lLastError != ERROR_SUCCESS)
        return ::ShowError(serial.GetLastError(), 
                _T("Unable to set COM-port setting"));


    lLastError = serial.SetMask(CSerial::EEventBreak |
        CSerial::EEventCTS   |
        CSerial::EEventDSR   |
        CSerial::EEventError |
        CSerial::EEventRing  |
        CSerial::EEventRLSD  |
        CSerial::EEventRecv);
    if (lLastError != ERROR_SUCCESS)
        return ::ShowError(serial.GetLastError(),
                _T("Unable to set COM-port event mask"));

    
    lLastError = serial.SetupReadTimeouts(CSerial::EReadTimeoutNonblocking);
    if (lLastError != ERROR_SUCCESS)
        return ::ShowError(serial.GetLastError(), 
            _T("Unable to set COM-port read timeout."));

    
    HANDLE hevtOverlapped = ::CreateEvent(0,TRUE,FALSE,0);;
    if (hevtOverlapped == 0)
        return ::ShowError(serial.GetLastError(),
                _T("Unable to create manual-reset event for overlapped I/O."));

    
    OVERLAPPED ov = {0};
    ov.hEvent = hevtOverlapped;

    
    bool fContinue = true; 
    lLastError = serial.WaitEvent(&ov);
    if(lLastError != ERROR_SUCCESS)
    {
        return ::ShowError(serial.GetLastError(), 
                _T("Unable to wait for a COM-port event."));
    }
    printf("Wait event started.\n");
    do
    {
                switch (::WaitForSingleObject(hevtOverlapped,INFINITE))
        {
        case WAIT_OBJECT_0:
            {
                
                const CSerial::EEvent eEvent = serial.GetEventType();

                
                if (eEvent & CSerial::EEventBreak)
                {
                    printf("\n### BREAK received ###\n");
                }

                
                if (eEvent & CSerial::EEventCTS)
                {
                    printf("\n### Clear to send %s ###\n",
                        serial.GetCTS()?"on":"off");
                }

                
                if (eEvent & CSerial::EEventDSR)
                {
                    printf("\n### Data set ready %s ###\n",
                        serial.GetDSR()?"on":"off");
                }

                
                if (eEvent & CSerial::EEventError)
                {
                    printf("\n### ERROR: ");
                    switch (serial.GetError())
                    {
                    case CSerial::EErrorBreak:
                        printf("Break condition");
                        break;
                    case CSerial::EErrorFrame:
                        printf("Framing error");
                        break;
                    case CSerial::EErrorIOE:
                        printf("IO device error");
                        break;
                    case CSerial::EErrorMode:
                        printf("Unsupported mode");    
                        break;
                    case CSerial::EErrorOverrun:
                        printf("Buffer overrun");
                        break;
                    case CSerial::EErrorRxOver:
                        printf("Input buffer overflow");
                        break;
                    case CSerial::EErrorParity:
                        printf("Input parity error");
                        break;
                    case CSerial::EErrorTxFull:
                        printf("Output buffer full");
                        break;
                    default:
                        printf("Unknown");
                        break;
                    }
                    printf(" ###\n");
                }

            
                if (eEvent & CSerial::EEventRing)
                {
                    printf("\n### RING ###\n");
                }

        
                if (eEvent & CSerial::EEventRLSD)
                {
                    printf("\n### RLSD/CD %s ###\n", serial.GetRLSD()?"on":"off");
                }

            
                if (eEvent & CSerial::EEventRecv)
                {
                    
                    DWORD dwBytesRead = 0;
                    char szBuffer[101];
                    do
                    {
                        

                        
                        lLastError = serial.Read(szBuffer,sizeof(szBuffer)-1,&dwBytesRead);
                        if (lLastError != ERROR_SUCCESS)
                            return ::ShowError(serial.GetLastError(), _T("Unable to read from COM-port."));

                        if (dwBytesRead > 0)
                        {
                            
                            szBuffer[dwBytesRead] = '\0';

                            
                            printf("%x", szBuffer);

                            if (strchr(szBuffer,'\n'))
                                fContinue = false;
                        }
                    }
                    while (true);
                }
            }
            break;

        case WAIT_ABANDONED:
            {
                
                fContinue = false;
            }
            break;

        default:
            {
                
                return ::ShowError(serial.GetLastError(), _T("Error while calling WaitForMultipleObjects."));
            }
            break;
        }
    }
    while (fContinue);

    serial.Close();
    return 0;
}