The two enclosed proc works perfectly in VB2008 but I'm unable to translate them correctly to C#
If I am understanding well the doc I need to use "static" features but they don't compile.
I'm quite sure the error will be obvious to an expert !
Thanks for the help
Original VB2008 Code:
Public Function OpenCommPort(ByVal SaxComm As CommStudio.SaxComm, ByVal nCommPort As Integer) As Integer Dim vInput As Object If (SaxComm.PortOpen = True) Then If (SaxComm.CommPort = "COM" & CStr(nCommPort)) Then 'correct comm port already open OpenCommPort = nCommPort Exit Function Else 'port open, but wrong comm port SaxComm.PortOpen = False 'close the port before re-assigning CommPort End If End If SaxComm.CommPort = nCommPort 'can not re-assign unless comm port closed On Error Resume Next 'skip error messages from appearing SaxComm.PortOpen = True If (SaxComm.PortOpen = True) Then ' Comm Port open OK SaxComm.InputLen = 0 vInput = SaxComm.Input 'Clear Buffer and reset count End If OpenCommPort = nCommPort End Function Private Sub RxOEMDF1() Static vInput As Object If blnInSync Then 'In-sync If vInput(SaxComm1.InBufferCount >= 3) Then SaxComm1.InputLen = 3 'get next 3 characters vInput = SaxComm1.Input nNoDataCtr = TB1_TWO_SEC ' put data in Byte array naByte(1) = vInput(0) naByte(2) = vInput(1) naByte(3) = vInput(2) ' test frame If ((naByte(1) >= &H80) And (naByte(2) < &H80) And (naByte(3) < &H80)) Then ' Frame OK nSpO2_Status = naByte(1) And &H7C nFloatByte(1) = naByte(1) And &H3 nFloatByte(2) = naByte(2) nFloatByte(3) = naByte(3) blnNewFrame = True ' signal New Frame blnNewPacket = True ' signal New Packet Else ' out of sync blnInSync = False End If ' Frame test End If ' There was 3 characters Else ' Not-in-sync If vInput Then '(SaxComm1.InBufferCount >= 1) Then SaxComm1.InputLen = 1 'to get one character vInput = SaxComm1.Input 'get character nNoDataCtr = TB1_TWO_SEC ' shift byte into Byte array naByte(1) = naByte(2) naByte(2) = naByte(3) naByte(3) = vInput(0) ' test frame If ((naByte(1) >= &H80) And (naByte(2) < &H80) And (naByte(3) < &H80)) Then ' Frame OK nSpO2_Status = naByte(1) And &H7C nFloatByte(1) = naByte(1) And &H3 nFloatByte(2) = naByte(2) nFloatByte(3) = naByte(3) blnInSync = True End If ' Frame OK End If ' There was a character End If ' Else Not-in-sync End Sub
One quick thing I see is that you're trying to address arrays with () rather than []. C# uses square brackets for arrays. Arrays are also numbered starting with zero rather than one. So the first element in an array is myArray[0], not myArray[1].
Also, static in C# means that the object does not need to be "new'd". With static objects and functions, they have no dynamic members so you can't have more than one of them at a time. (btw, this is a very oversimplified description and you should read more on the subject...)
I'll try and look through and see if anything else jumps out...
gt2847c
Other items I see:
Line 7 needs parenthesis around your if statement. You have:
if SaxComm1.InBufferCount >= 3
Should read
if ( if SaxComm1.InBufferCount >= 3 )
naByte does not appear to be declared anywhere, so I don't know what type it is or how large it is. And as stated in my previous comment, your references to naByte and nFloatByte should start at zero, for example:
// put data in Byte array naByte[0] = static_RxOEMDF1_vInput[0]; naByte[1] = static_RxOEMDF1_vInput[1]; naByte[2] = static_RxOEMDF1_vInput[2];
Try those fixes and see what you get. Also, if you can include specific compiler errors, it may help determine what else needs to be worked on...
Mike Tomlinson
C# doesn't have a direct equivalent of VB's local, static variables. For C#, simply move the declaration of that variable from the method, out to class level.
Also, static in C# means that the object does not need to be "new'd". With static objects and functions, they have no dynamic members so you can't have more than one of them at a time. (btw, this is a very oversimplified description and you should read more on the subject...)
I'll try and look through and see if anything else jumps out...