Stap 1: Visual Basic 6.0 (Making DLL)
1. klasse is onafhankelijk, Declareer variabelen als privé (meer privacy)
2. accepteren geen objecten in klasse. In plaats daarvan aanvaarden 'varianten', 'Stel in' op een particulier gedeclareerde object.
In het volgende voorbeeld:
Privé MC als MSComm
Public sub InitializeClass (Byval bestandsnaam as String, MsComm as Variant) ' in plaats van
Public sub InitializeClass (Byval bestandsnaam as String, MsComm als MSComm)
Vervolgens MC Set MsComm =
3. anderen??? (Ik heb alleen het probleem vermeld in 2 ondervonden.)
Mijn Servo Functie
Privé The_File As String, The_Section As String
Privé MComm als MsComm, tBox als TextBox
Privé TextLength zo lang, opdracht als tekenreeks
Private Declare Sub Sleep Lib "kernel32" (ByVal milliseconden As Long)
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Const LocWordLength = 20
Public Sub InitServo(PortSettingFileName As String, FileSection As String, MsComm As Variant, txtBoxFeedback As Variant)
The_File = PortSettingFileName
The_Section = FileSection
MComm instellen = MsComm
Instellen van de tBox = txtBoxFeedback
' Output geladen COMPOORT instellingen
Log "bestand:" & The_File & vbCrLf & "sectie:" & The_Section
' Open COMpoort en sluit met Arduino
Met MComm
Als. PortOpen dan. PortOpen = False ' sluit en het nummer van de com-poort instellen
. CommPort = SimpleGet("comport")
. Instellingen = SimpleGet("settings")
. EOFEnable = True
Log "Com-poort:" &. CommPort & vbCrLf & "instellingen:" &. Instellingen
Eindigen met
SendData ("CO")
End Sub
Public Sub SendData (ByVal Commandx As String)
Op GoTo fout
Opdracht = Commandx
' eerst controleren, opdracht
Opdracht = Trim(Command) ' ontdoen van extra spaties aan de zijkant
Als (InStr (opdracht, "") <> 0) of (Len(Command) > 10) dan
GoTo fout ' Stuur geen als opdracht indeling verkeerd is
End If
Dim i As Integer, Char zoals String
Voor i = 1 tot 2 ' omdat de lengte van ecpected teken is alleen 2
Char = Mid (Command, i, 1)
Als (Char > = "A" en Char < = "Z") dan ' niets doen als eerste 2 tekens alfabetten
Anders
GoTo fout
End If
Volgende ik
Als InStr (Char, "C") = 0 Then ' controleren voor getallen voor de input geen verband houden met CT en CO
Voor i = 3 te Len(Command) ' zorg ervoor dat de rest van de opdracht zijn gehele getallen
Char = Mid (Command, i, 1)
Als (Char > = "0" en Char < = "9") dan ' niets doen als overige tekens cijfers zijn
Anders
GoTo fout
End If
Volgende ik
End If
Als InStr (opdracht, "L") = 0 Then ' als opdracht niet om locatie vraagt
TextLength = Len(Command)
Anders
TextLength = LocWordLength
End If
Met MComm
. DTREnable = False
. RTSEnable = False ' verzoek signaal uitschakelen
Als. PortOpen = False Then. PortOpen = True ' poort openen
. Uitvoer Commandx = ' Verstuur tekst
. RThreshold = TextLength ' Save verzonden tekenreekslengte
End With ' openlaten van de poort te wachten op de echo signaal om verder te gaan
ServoOnComm
Exit Sub
Fout:
Als (Err.Description) dan
MsgBox Err.Description
Anders
MsgBox 'Invalid Command!'
End If
End Sub
Private Sub Log(Text As String)
Op fout GoTo ERRR
tBox.Text = tekst & vbCrLf & tBox.Text
Exit Sub
ERRR:
MsgBox "fout voordat ze zich aanmelden:" & Err.Description
Resume Next
End Sub
' Handmatige OnComm-functie voor het detecteren van echo van verzonden gegevens
Private Sub ServoOnComm()
Dim InString As String
Doen
DoEvents
Loop totdat MComm.CommEvent comEvReceive en MComm.InBufferCount = > = TextLength
Slaap (5)
Als TextLength = LocWordLength Then ' wachten voor overige tekens te bereiken buffer
Slaap (30)
End If
' Alle beschikbare gegevens op te halen.
MComm.InputLen = 0
' Controleren of gegevens.
Als MComm.InBufferCount > 0 Then ' gegevens lezen.
InString = MComm.Input
' controleren of het ontvangen van gegevens is zoals verwacht.
Als InStr (InString, opdracht) > 0 Then ' als opdracht een echo is
ElseIf InStr(Command, "L") <> 0 dan ' als opdracht Origineel L heeft en echo lang is
Als Len(InString) > = LocWordLength Then
End If
Anders
GoTo fout
End If
Als Len(InString) > 0 Then ' Output echo op textbox
tBox.Text = InString & tBox.Text
End If
End If
Als MComm.PortOpen dan MComm.PortOpen = False ' poort sluiten na ontvangst van antwoord
Exit Sub
Fout:
MsgBox "fout!"
End Sub
Public Sub ExitServo()
SendData ("CT")
Als MComm.PortOpen dan MComm.PortOpen = False ' als poort geopend is, sluit als voor afslag
' misschien kunt toevoegen aan huis servo voordat u afsluit
End Sub
Public Function SimpleGet (VarName As String) As String
Statische sLocalBuffer As String * 500
Dim l As Integer
l = GetPrivateProfileString (The_Section, VarName, vbNullString, sLocalBuffer, 500, The_File)
SimpleGet = links$ (sLocalBuffer, l)
End Function