VS2005下MSCOMM控件的简单使用与封装

时间:2022-09-06 11:01:49

在Windows下面如果要与COM通信的话,有二个办法,要么就用微软的API,还有就是他提供的控件,前者功能强大,可造性强,但使用上面自己需要写的代码比较多,喜欢动手的朋友可以偿试,还有一个就是MSCOMM控件了,这个微软已经封装好了,直接给出接口的形式,直接使用,比较省时,代码量少,但可造性不强,但它的功能已经基本够用了。

下面首先,安装MSCOMM控件,如果是VC6.0则,会自带,在VS2003以后好像就没有了,这需要到VC6.0下面去复制对应控件文件过来,下面我把我用的文件上传到附件里,供大家使用,里面有四个文件,复制到/windows/system32下面就行,然后运行BAT会自动注册,安逸啊VS2005下MSCOMM控件的简单使用与封装

注册好后,到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打开,关闭,发送,接收的小类就做好拉,写的不好的地方,请大家多多指教!

本文出自 “西边太阳” 博客,请务必保留此出处http://thgenius.blog.51cto.com/1042803/1322019