各位大侠,小弟因为项目需要,需要操纵一个串口打印机,遇到几个问题,希望各位不吝赐教。 我是用Windows API函数 CreateFile()来打开的串口,打印机驱动是安装在Com1上面的,我用串口小助手的打开Com1的时候提示“初始化缓冲区失败”,而Com2没有问题,我怀疑是打印机的驱动占用了Com1, 不知道是否正确(问题1)? 还有就是我用WriteFile(), 将数据写到来串口,返回值也是1,应该就是写正确了啊,同时我也看到打印机队列里面会有一个任务,但是我用ReadFile()来读取的时候,却读不到我写进去的数据,一直是为空的,我还是照着网上的事例来做的,不知到哪里不正确,Com1和Com2都读不到。(问题2) 
写数据: 
        char lpOutBuffer[7]; 
memset(lpOutBuffer,'\0',7); //前7个字节先清零 
lpOutBuffer[0]='\x11';  //发送缓冲区的第1个字节为DC1 
lpOutBuffer[1]='0';  //第2个字节为字符0(30H) 
lpOutBuffer[2]='0'; //第3个字节为字符0(30H) 
lpOutBuffer[3]='1'; // 第4个字节为字符1(31H) 
lpOutBuffer[4]='0'; //第5个字节为字符0(30H) 
lpOutBuffer[5]='1'; //第6个字节为字符1(31H) 
lpOutBuffer[6]='\x03'; //第7个字节为字符ETX char *szBuffer = "^XA\n\r^RS8\n\r^RFR,H,0,8,2^FN1^FS^HV1,,8-byte Tag ID Data:^FS\n\r^XZ"; 
//从该段代码可以看出,仪表的通讯地址为001 
DWORD dwBytesWrite=7; 
COMSTAT ComStat; 
DWORD dwErrorFlags; 
BOOL bWriteStat; 
ClearCommError(hCom,&dwErrorFlags,&ComStat); 
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,& dwBytesWrite,NULL); 
if(!bWriteStat) 

AfxMessageBox("写串口失败!"); 
} 读数据: 
        char str[100]; 
memset(str,'\0',100); 
DWORD wCount=100;//读取的字节数 
BOOL bReadStat; 
bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL); 
if(!bReadStat) 
AfxMessageBox("读串口失败!"); 
PurgeComm(hCom, PURGE_TXABORT| 
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); 
rrrr=str; 
UpdateData(FALSE); 再者就是串口调试小助打开我的Com1的时候都会报错, 而我自己的程序代码却不会提示我打开串口失败,不知是何原因?(问题3) 
hCom=CreateFile("COM2",//COM1口 
GENERIC_READ|GENERIC_WRITE, //允许读和写 
0, //独占方式 
NULL, 
OPEN_EXISTING, //打开而不是创建 
0, //同步方式 
NULL); 
if(hCom==(HANDLE)-1) 

AfxMessageBox("打开COM失败!"); 
return FALSE; 
} SetupComm(hCom,100,100); //输入缓冲区和输出缓冲区的大小都是1024 COMMTIMEOUTS TimeOuts; 
//设定读超时 
TimeOuts.ReadIntervalTimeout=MAXDWORD; 
TimeOuts.ReadTotalTimeoutMultiplier=0; 
TimeOuts.ReadTotalTimeoutConstant=0; 
//在读一次输入缓冲区的内容后读操作就立即返回, 
//而不管是否读入了要求的字符。 
//设定写超时 
TimeOuts.WriteTotalTimeoutMultiplier=100; 
TimeOuts.WriteTotalTimeoutConstant=500; 
SetCommTimeouts(hCom,&TimeOuts); //设置超时 DCB dcb; 
GetCommState(hCom,&dcb); 
dcb.BaudRate=9600; //波特率为9600 
dcb.ByteSize=8; //每个字节有8位 
dcb.Parity=NOPARITY; //无奇偶校验位 
dcb.StopBits=TWOSTOPBITS; //两个停止位 
SetCommState(hCom,&dcb); PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);还有一个菜鸟问题,我用writefile写到串口的数据,可以用readfile读出来码?还是只能读取设备返回的数据?