VS2005下MSCOMM控件的簡單使用與封裝

在Windows下面如果要與COM通信的話,有二個辦法,要麼就用微軟的API,還有就是他提供的控件,前者功能強大,可造性強,但使用上面自己需要寫的代碼比較多,喜歡動手的朋友可以償試,還有一個就是MSCOMM控件了,這個微軟已經封裝好了,直接給出接口的形式,直接使用,比較省時,代碼量少,但可造性不強,但它的功能已經基本夠用了。

下面首先,安裝MSCOMM控件,如果是VC6.0則,會自帶,在VS2003以後好像就沒有了,這需要到VC6.0下面去複製對應控件文件過來,下面我把我用的文件上傳到附件裏,供大家使用,裏面有四個文件,複製到/windows/system32下面就行,然後運行BAT會自動註冊,安逸啊j_0058.gif

註冊好後,到VS2005IDE上,在工具-選則工具箱項,彈出來的對話框中選COM組件,找到MSCOMM,確定即可,然後添加對應的變量關聯,控制對應的頭文件mscomm.h和源文件mscomm.cpp就會自動添加到工程中。

這下就沒啥事了,直接使用,封裝的代碼如下:

class CComApp
{
private:
    CMscomm *m_mscomm;
public:
    CComApp(CMscomm* mscomm);
    void OpenCom();
    void OpenCom(int ComPort,int sThreshold,int rThreshold,int imputMode,CString csSeting);
    void CloseCom();
    void SendComData(CString csData);
    CString ReceiveComData(BOOL isCString);
public:
    ~CComApp(void);
};



void CComApp::OpenCom()
{
    m_mscomm->put__CommPort(1);
    m_mscomm->put_SThreshold(0);
    m_mscomm->put_RThreshold(1);
    m_mscomm->put_InputMode(1);
    m_mscomm->put_Settings(_T("9600,n,8,1"));
    m_mscomm->put_PortOpen(TRUE);
}
void CComApp::OpenCom(int ComPort, int sThreshold, int rThreshold, int imputMode, CString csSeting)
{
    m_mscomm->put__CommPort(ComPort);
    m_mscomm->put_SThreshold(sThreshold);
    m_mscomm->put_RThreshold(rThreshold);
    m_mscomm->put_InputMode(imputMode);
    m_mscomm->put_Settings(csSeting);
    m_mscomm->put_PortOpen(TRUE);
}
void CComApp::CloseCom()
{
    m_mscomm->put_PortOpen(FALSE);
}
void CComApp::SendComData(CString csData)
{
    m_mscomm->put_Output(COleVariant(csData));
}
CString CComApp::ReceiveComData(BOOL isCString)
{
    VARIANT variant_inp;
    CString csStrRecvData,csHexRecvData;
    COleSafeArray safearray_inp;
    long length,i;
    BYTE data[1024];
    CString csStr;
    variant_inp=m_mscomm->get_Input();       //讀取緩衝區內的數據
    safearray_inp=variant_inp;               //將VARIANT型變量轉換爲ColeSafeArray型變量
    length=safearray_inp.GetOneDimSize();    //確定數據長度
    for(i=0;i<length;i++)
    {
        safearray_inp.GetElement(&i,data+i); //將數據轉換爲BYTE型數組
    }
    if (isCString)
    {
        for(i=0;i<length;i++)                    //將數組轉換爲Cstring型變量
        {
            BYTE a=* (char *)(data+i);
            csStr.Format(_T("%c"),a);
            csStrRecvData += csStr;
        }
        return csStrRecvData;
    }else{
        for(i=0;i<length;i++)                    //將數組轉換爲十六進制
        {
            BYTE a=* (char *)(data+i);
            csStr.Format(_T("%02X "),a);
            csHexRecvData += csStr;
        }
        return csHexRecvData;
    }
}

呵呵 ,簡單的一個com打開,關閉,發送,接收的小類就做好拉,寫的不好的地方,請大家多多指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章