这是我在一个后台系统摘抄出来的,在此基础上完成了一个独立的PPI读写程序(非DLL或控件方式)
//*************************************************************************
//**模 块 名:YFCOM.cpp
//**说 明:YFSoft 版权所有2005 - 2006(C)
//**创 建 人:叶帆
//**日 期:2006年4月4日
//**修 改 人:
//**日 期:
//**描 述:串口操作
//**版 本:V1.0
//*************************************************************************
#include "stdafx.h"
#include "yfcom.h"
//串口句柄
HANDLE m_COM_Handle;
//两个信号全局变量(串口操作用)
OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
//*************************************************************************
//函 数 名:OpenCom
//输 入:long lngPort, 串口号
// char *cfgMessage, 配置信息,形如"9600,e,8,1"
// long lngInSize, 接收缓冲区大小
// long lngOutSize 发送缓冲区大小
//输 出:long
//功能描述:打开串口
//全局变量:
//调用模块:
//作 者:叶帆
//日 期:2006年4月4日
//修 改 人:
//日 期:
//版 本:
//*************************************************************************
long OpenCom(long lngPort,char *cfgMessage,long lngInSize,long lngOutSize)
{
try
{
char szMsg[255];
DCB dcb;
//打开端口
if (lngPort>9)
sprintf( szMsg, ".//COM%d", lngPort );
else
sprintf( szMsg, "COM%d", lngPort );
//用异步方式读写串口
m_COM_Handle = CreateFile(szMsg, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED , NULL );
if( m_COM_Handle == NULL ) return( 2 );
//清空异步读写参数
memset(&(m_OverlappedRead), 0, sizeof (OVERLAPPED));
memset(&(m_OverlappedWrite), 0, sizeof (OVERLAPPED));
//设置dcb块
dcb.DCBlength = sizeof( DCB ); //长度
GetCommState(m_COM_Handle , &dcb );
//波特率,奇偶校验,数据位,停止位 如:9600,n,8,1
sprintf(szMsg,"COM%d:%s", lngPort,cfgMessa