Est-il possible que .Net SerialPort et VB6 MSComm fonctionnent différemment?SerialPort Vs MSComm
Dans les deux cas, je suis en train de lire des données du tampon, et tous les deux m'ont obtenu des chaînes différentes, si j'importe la DLL MSComm dans mon projet .Net, ça fonctionne parfaitement.
Quelqu'un at-il plus d'informations en profondeur?
Si elle aide, voici mes échantillons simples, dans les deux cas, j'envoyer le même tableau d'octets ...
VB6:
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();
Quelle est la différence entre les deux chaînes? Vérifiez-vous les erreurs de réception (par exemple, les erreurs de parité)? Pourquoi ne configurez-vous pas/ne spécifiez-vous pas les paramètres du port COM: par exemple, le débit en bauds, les bits d'arrêt et la parité? – ChrisW
J'ai écrit beaucoup de code de port série, à la fois natif et. NET, et IMO System :: IO :: Ports :: SerialPort et MSCOMM.OCX sont à la fois la corbeille. Ils prennent l'API du port série Win32 robuste et puissant et en abusent, vous forçant dans de mauvaises pratiques. Si vous voulez écrire du code robuste, vous devrez utiliser p/invoke (ou ce que j'ai fait, un wrapper C++/CLI). –
@Ben Voigt Qu'est-ce qu'un encapsuleur C++/CLI sinon PinVoke? Je pensais que C++/CLI était seulement pour le portage de C++ hérité (non managé) à .NET; cela aide-t-il également à accéder aux API non gérées à partir du code managé? – ChrisW