参照网上写了个串口操作类:为了方便调用将串口类进行了封装,增加了命令发送类,CSend;以后我只要通过对CSend的方法进行操作即可,CSend里面有个命令发送方法:SendCommond;该方法通过解析读进程的数据而判断是否成功。
我现在希望同时打开多个串口,每个串口读写进程相互独立,那目前声明全局变量bufDataReceived的方式就不行了,而改成私有变量的话不知道如何调用回传函数OnDataArrive() 请高手指点。
源代码这里http://www.andabc.com/Temp/SerialPortTest.rar下载,希望大家不吝指教。
VC2005 MFC DLL
我现在希望同时打开多个串口,每个串口读写进程相互独立,那目前声明全局变量bufDataReceived的方式就不行了,而改成私有变量的话不知道如何调用回传函数OnDataArrive() 请高手指点。
源代码这里http://www.andabc.com/Temp/SerialPortTest.rar下载,希望大家不吝指教。
VC2005 MFC DLL
贴出源代码:
Send.h#pragma onceclass CSend
{
public:
CSend(void);
public:
~CSend(void);public:
BOOL OpenPort(int nPort);
BOOL ClosePort();
bool IsOpen();
BOOL SendCommond(BYTE *lpBufferOut,int &Len);};
Send.cpp
#include "StdAfx.h"
#include "iostream"
#include <iomanip>
#include "PSerialPort.h"
#include "Send.h"CSend::CSend(void)
{
}CSend::~CSend(void)
{
}
//-----------全局变量
CPSerialPort *m_pSerial;
char bufDataReceived[255];
int intDataReceived;
BOOL Open;
BOOL Receive;
//-----------全局变量void OnDataArrive(char *data,int length,DWORD userdata)
{
//处理收到的数据
int i;
if(length!=0)
{
for(i=0;i<length;i++)
{
bufDataReceived[intDataReceived] = data[i]; intDataReceived++;
}
}
}bool CSend::IsOpen()
{
if(Open)
{return true;}
else
{return false;}}BOOL CSend::OpenPort(int nPort)
{
CString sPort;
sPort.Format(_T("\\\\.\\COM%d"), nPort);
//串口类变量
m_pSerial=new CPSerialPort();
Open = m_pSerial->OpenPort(sPort,57600,8,2,2,OnDataArrive,(DWORD)this); return Open;}//
BOOL CSend::SendCommond(BYTE *lpBufferOut,int &Len)
{
if(!Open)
{//串口未打开
return FALSE;
} char byteSecondCommand; DWORD dwRealSend = 0;
char pSendBuf[5];
pSendBuf[0]=0x00;
pSendBuf[1]=0x00;
pSendBuf[2]=0x00;
pSendBuf[3]=0x00;
pSendBuf[4]=0x00; BOOL boolReadReault; //定义读取结果
DWORD dwBytesWritten=0;
intDataReceived =0;//初始化计数器//m_pSerial->Activate();//激活接受线程
dwBytesWritten=m_pSerial->WritePort(pSendBuf,5);//发送数据
if(dwBytesWritten==0)
{
AfxMessageBox(_T("无法向端口写入数据!"));
}
while(1)
{
Sleep(1); //暂停1毫秒
//未读到卡
if((BYTE)bufDataReceived[0]==0x01)
{
boolReadReault=TRUE;
lpBufferOut[0]= 0x01;
Len = 1;
break;
}
else if((BYTE)bufDataReceived[0]==0x00)
{
boolReadReault=FALSE;
lpBufferOut[0]= 0x00;
Len = 1;
break; }
}
return boolReadReault;
}
既然是串口类,那么串口里的波特率等的设置不应该写死的吧,应该有设置这些的函数
当前是OnDataArrive 这个类要么声明全局的 要么声明static的 ,要是这样的话接收变量:
//-----------全局变量
CPSerialPort *m_pSerial;
char bufDataReceived[255];
int intDataReceived;
BOOL Open;
BOOL Receive;
//-----------全局变量怎么个声明法?
因为上面的变量定义方法为全局变量,要是实现每个串口类独立的对象就是这块: //串口类变量
m_pSerial=new CPSerialPort();就是在打开每个串口是 声明一个串口类对象,那么 m_pSerial类是不是只能是私有的?
这样如何实现??