Paso 1: Visual Basic 6.0 (fabricación de DLL)
1. clase es independiente, declarar las variables como privadas (mayor privacidad)
2. no se aceptan objetos en clase. Por el contrario, aceptar 'variantes' entonces 'set' para un objeto declarado privado.
Ejemplo:
Privado MC como MSComm
Público sub InitializeClass (Byval fileName como cadena, MsComm como variante) ' en vez de
Público sub InitializeClass (Byval fileName como cadena, MsComm como MSComm)
Entonces, Set MC = MsComm
3. otros??? (Sólo he encontrado el problema en 2).
Mi Servo Función
Privado The_File cadena, The_Section como cadena
MComm privado como MsComm, Box como cuadro de texto
LongitudTexto privado mientras, comando como cadena
Privado Declare Sub Sleep Lib "kernel32" (ByVal milisegundos como tiempo)
Private Declare la función GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (lpApplicationName ByVal As String, ByVal lpKeyName como cualquiera, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize como largo, ByVal lpFileName As String) como larga
Private Const LocWordLength = 20
Público Sub InitServo(PortSettingFileName As String, FileSection As String, MsComm As Variant, txtBoxFeedback As Variant)
The_File = PortSettingFileName
The_Section = FileSection
Establecer MComm = MsComm
Set Box = txtBoxFeedback
' Cargado de salida ajustes de COMPORT
Registro de "archivo:" & The_File & vbCrLf & "sección:" & The_Section
' Abrir puerto y conectar con Arduino
Con MComm
Si es. PortOpen entonces. PortOpen = False ' cerrar y ajustar el número de puerto com
. CommPort = SimpleGet("comport")
. Ajustes = SimpleGet("settings")
. EOFEnable = True
Registro de "Puerto Com:" &. CommPort & vbCrLf & "configuración:" &. Configuración
Terminar con
SendData ("CO")
End Sub
Público Sub SendData (ByVal Commandx como cadena)
On Error GoTo Error
Comando = Commandx
' fíjese primero en comando
Comando = Trim(Command) ' deshacerse de espacios adicionales en el lado
Si (InStr (comando, "") <> 0) o (Len(Command) > 10) entonces
GoTo Error ' no enviar si el formato del comando es incorrecta
End If
Dim yo como Integer, Char, String
Para i = 1 a 2 ' porque longitud de carácter ecpected es sólo 2
Char = Mid (comando, i, 1)
Si (Char > = "A" y Char < = "Z") entonces ' no hacer nada si los 2 primeros caracteres son alfabetos
Otra cosa
GoTo Error
End If
Siguiente
Si InStr (Char, "C") = 0 Then ' comprobar números de entrada no relacionada con CT y CO
Para i = 3 a Len(Command) ' Asegúrese de que el resto del comando son números enteros
Char = Mid (comando, i, 1)
Si (Char > = "0" y Char < = "9") entonces ' no hacer nada si los caracteres restantes son números
Otra cosa
GoTo Error
End If
Siguiente
End If
Si InStr (comando, "L") = 0 Then ' si el comando no solicitar ubicación
LongitudTexto = Len(Command)
Otra cosa
LongitudTexto = LocWordLength
End If
Con MComm
. DTREnable = False
. = False ' desactivar la petición para enviar una señal
Si es. PortOpen = False Then. PortOpen = True ' abrir el puerto
. Salida = Commandx ' enviar texto
. RThreshold = longitudTexto ' guardar envía la longitud de cadena
Final con ' puerto para dejar abiertas esperar señal de eco proceder
ServoOnComm
Salida Sub
Error:
Si (Err.Description) entonces
MsgBox Err.Description
Otra cosa
MsgBox "Comando no válido!"
End If
End Sub
Private Sub Log(Text As String)
En Error GoTo error
tBox.Text = texto & vbCrLf & tBox.Text
Salida Sub
ERROR:
MsgBox "Error al registro:" & Err.Description
Reanudar la siguiente
End Sub
' Función de OnComm manual para detectar eco de datos enviados
Private Sub ServoOnComm()
Dim InString cadena
Hacer
DoEvents
Loop hasta que MComm.CommEvent = comEvReceive MComm.InBufferCount y > = longitudTexto
Sueño (5)
Si longitudTexto = LocWordLength entonces ' espere caracteres restantes llegar a tampón
Sueño (30)
End If
' Recuperar todos los datos disponibles.
MComm.InputLen = 0
' Comprobar datos.
Si MComm.InBufferCount > 0 entonces ' leer los datos.
InString = MComm.Input
' verifica si los datos recibidos es el esperado
Si InStr (InString, comando) > 0 entonces ' si el comando es un eco
ElseIf InStr(Command, "L") <> 0 entonces ' si el comando original L y echo mucho
Si Len(InString) > = LocWordLength entonces
End If
Otra cosa
GoTo Error
End If
Si Len(InString) > 0 entonces ' eco de salida en el cuadro de texto
tBox.Text = InString & tBox.Text
End If
End If
Si MComm.PortOpen entonces MComm.PortOpen = False ' cierra el puerto después de recibir respuesta
Salida Sub
Error:
MsgBox "Error de recibir!"
End Sub
Público Sub ExitServo()
SendData ("CT")
Si MComm.PortOpen entonces MComm.PortOpen = False ' si el puerto está abierto, cierre si antes de la salida
' tal vez puede añadir a servo casa antes de salir
End Sub
Función pública SimpleGet (VarName como cadena) como cadena
Static sLocalBuffer As String * 500
Dim l como entero de
l = GetPrivateProfileString (The_Section, VarName, vbNullString, sLocalBuffer, 500, The_File)
SimpleGet = Left$ (sLocalBuffer, l)
End Function