问题描述
c#串口通信中,采用winapi函数ClearCommError进行清除串口错误或者读取当前的串口的状态。本人采用两种声明方式:【1】[System.Runtime.InteropServices.DllImport("kernel32.dll")]publicstaticexternboolClearCommError(IntPtrhFile,refuintlpErrors,refCOMSTATlpStat);【2】[System.Runtime.InteropServices.DllImport("kernel32.dll")]publicstaticexternboolClearCommError(IntPtrhFile,refuintlpErrors,refIntPtrlpStat);对应的C#语言描述为【1】uinta=0;COMSTATcomstat2=newCOMSTAT();ClearCommError(myCommPtr,refa,refcomstat2);其中,myCommPtr已经得到串口句柄,COMSTAT为一个结构。【2】uinterror=0;IntPtrptrComstat=Marshal.AllocHGlobal(Marshal.SizeOf(typeof(COMSTAT)));Win32Com.ClearCommError(myCommPtr,referror,refptrComstat);COMSTATcomstat=newCOMSTAT();comstat=(COMSTAT)Marshal.PtrToStructure(ptrComstat,typeof(COMSTAT));Marshal.FreeHGlobal(myCommPtr);其中,myCommPtr已经得到串口句柄,COMSTAT为一个结构。现在出现问题了:【1】从comstat2可以得到正确的串口状态,而【2】从comstat则好像返回的是随机数据。笔者百思不得其解,请教有相关经验的高手,指点迷津,先谢谢了^_^
解决方案
解决方案二:
波特率设置了吗?如果是VS2003,可以用vb的串口控件,另一个方法是网上有比较号的串口程序,可以找一下,