.Net SerialPort와 VB6 MSComm이 다르게 작동 할 수 있습니까?SerialPort 대 MSComm
두 경우 모두 버퍼에서 데이터를 읽는 중이며 둘 다 다른 문자열을가집니다. MSComm dll을 내 .Net 프로젝트로 가져 오면 완벽하게 작동합니다 (분명히).
누구든지 자세한 정보가 있습니까?
Dim MSComm1 As Object
Dim ArrToSend() As Byte
Dim IncomeData As String
Set MSComm1 = CreateObject("MSCommLib.MSComm")
With MSComm1
.CommPort = 1
.PortOpen = True
End With
ReDim ArrToSend(4)
ArrToSend(0) = 179
ArrToSend(1) = 1
ArrToSend(2) = 92
ArrToSend(3) = 92
MSComm1.Output = ArrToSend
IncomeData = MSComm1.Input
C#을
SerialPort _serialPort = new SerialPort();
_serialPort.Open();
Byte[] _bytesToSend = new Byte[4];
_bytesToSend[0] = 179;
_bytesToSend[1] = 1;
_bytesToSend[2] = 92;
_bytesToSend[3] = 92;
_serialPort.Write(_bytesToSend, 0, _bytesToSend.Length);
String ReadExisting = _serialPort.ReadExisting();
두 문자열의 차이점은 무엇입니까? 수신 오류 (예 : 패리티 오류)를 확인하고 있습니까? COM 포트 매개 변수를 설정하거나 지정하지 않는 이유는 무엇입니까? 예 : 전송 속도, 정지 비트 및 패리티? – ChrisW
필자는 네이티브 및 .NET의 직렬 포트 코드를 많이 작성했으며 IMO System :: IO :: Ports :: SerialPort 및 MSCOMM.OCX는 모두 휴지통입니다. 그들은 견고하고 강력한 Win32 시리얼 포트 API를 사용하여 악용 사례에 강요합니다. 견고한 코드를 작성하려면 p/invoke (또는 C++/CLI 래퍼)를 사용해야합니다. –
@Ben Voigt pinvoke가 아니라면 C++/CLI wrapper는 무엇입니까? C++/CLI는 레거시 (관리되지 않는) C++에서 .NET으로 이식하기위한 것이라 생각했습니다. 관리되는 코드에서 관리되지 않는 API에 액세스하는 데 도움이됩니까? – ChrisW