串口发送时的奇怪现象?有经验的看看。该怎么解决

串口发送时的奇怪现象?有经验的看看。 - C++ Builder / Windows SDK/API
我一个朋友,前两天写了一个软件,让我在公司平台上帮忙测试一下。结果发现了一个很奇怪的现象:
在我的电脑和我朋友电脑上测试串口通讯部分都正常,可是一放在公司的一台工控机上运行,问题就来了。电脑第一次启动后运行软件,总是无法通讯,后来通过连接到另一个串口,发现软件发送的全都是0x80 0x00 0x80 0x00之类的乱码。然后关掉软件,随便运行串口调试工具之类的软件向串口发点数据后,我朋友做的那个软件发送数据就正常了。

请问大家是否也遇到过这种问题?我朋友软件里的串口类是他N年前从网上下载的,一直用的很好。没出现过问题。

------解决方案--------------------
不要GetCommState后修改几个参数再Set。
其它程序运行后如果修改了你程序中没修改的那个参数,很可能就会有问题。

把if(!::GetCommState(hComm,&dcb)) return FALSE;去掉,把所有的DCB里的成员都设置一次。要偷懒的话可以考虑用BuildCommDCB,如BuildCommDCB("baud=9600 parity=N data=8 stop=1 rts=tg dtr=on",&dcb);
------解决方案--------------------
C/C++ code
typedef struct _DCB {
  DWORD DCBlength;
  DWORD BaudRate;
  DWORD fBinary  :1;
  DWORD fParity  :1;
  DWORD fOutxCtsFlow  :1;
  DWORD fOutxDsrFlow  :1;
  DWORD fDtrControl  :2;
  DWORD fDsrSensitivity  :1;
  DWORD fTXContinueOnXoff  :1;
  DWORD fOutX  :1;
  DWORD fInX  :1;
  DWORD fErrorChar  :1;
  DWORD fNull  :1;
  DWORD fRtsControl  :2;
  DWORD fAbortOnError  :1;
  DWORD fDummy2  :17;
  WORD  wReserved;
  WORD  XonLim;
  WORD  XoffLim;
  BYTE  ByteSize;
  BYTE  Parity;
  BYTE  StopBits;
  char  XonChar;
  char  XoffChar;
  char  ErrorChar;
  char  EofChar;
  char  EvtChar;
  WORD  wReserved1;
} DCB, *LPDCB;