Hola:
Haciendo pruebas ya que en VB .net no entiendo mucho. Tengo esta función tonta sin parámetros.
Sub Mensaje1()
Console.WriteLine()
Console.WriteLine("Creando archivo al disco duro...")
End Sub
Lo he intentado llamar directamete así y no funciona.
mensaje1()
No sirve.
¿Cómo se le llama?
Saludos.
eso no es una funcion, es un evento... tienes que llamarla con call si no me equivoco, intenta con un tutorial de vb.net o espera a que llegue alguien con experiencia en esto y te explique
Para aclarar las cosas:
No es una función ni tampoco un evento, sino un
método...
Sub sería el equivalente a
void en C# (un bloque de código que no devuelve un valor de retorno).
En VB.NET no se utiliza la sentencia
Call para nada, eso es de VB. Cabe mencionar que también se puede utilizar en VB.NET, pero si existe es solo por motivos de compatibilidad. Nadie lo usa.
Cita de: Meta en 21 Marzo 2017, 07:37 AMLo he intentado llamar directamete así y no funciona.
mensaje1()
No sirve.
Lo estás llamando correctamente. El problema probablemente sea que la clase donde declaraste ese método tenga un nivel de acceso inferior a la clase desde donde lo estés intentando llamar, o que no hayas instanciado la clase donde declaraste dicho método. Corrije el nivel de visibilidad del método y/o de la clase (ej.
Public Shared Sub MiMetodo()).
De todas formas no somos adivinos, no sé que significa "no funciona" o "no sirve". Muestra el mensaje de error por lo menos. Esto ya deberías tenerlo más que presente como usuario habitual del foro de programación,
proporciona los detalles necesarios. Muestra la definición de la clase o del módulo donde tengas declarado ese método.
EDITO:Formas en las que puedes llamar a ese método:
<HideModuleName>
Public Module MyModule1
Public Sub MyMethod()
End Sub
End Module
MyModule1.MyMethod()
Public NotInheritable Class MyClass1
Public Sub New()
End Sub
Public Sub MyMethod()
End Sub
End Class
Dim instance As New MyClass1()
instance.MyMethod()
Public NotInheritable Class MyClass2
Private Sub New()
End Sub
Public Shared Sub MyMethod()
End Sub
End Class
MyClass2.MyMethod()
¡Saludos!
Hola:
Se me había pasado de que la función devuelve vaor y el método no.
http://es.stackoverflow.com/questions/7403/diferencias-entre-m%C3%A9todos-procedimiento-funci%C3%B3n-para-que-sirven-cada-uno-y-co
https://asm86.wordpress.com/2012/05/19/proceso-subrutina-funcion-y-metodo-son-cosas-diferentes/
Funciona así por lo que veo.
Public Shared Sub Mensaje1()
Console.WriteLine()
Console.WriteLine("Creando archivo al disco duro...")
End Sub
Esta parte y ano me da problemas.
He probado muchos convertidores y ninguno saca algo al 100 %. Gracias por la propuesta. Ahora te toca convertir estas líneas que no lo hace bien.
http://converter.telerik.com/
http://www.mundoprogramacion.com/NET/WebServices/deCSaVB_web.aspx
El código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.
Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
CitarGravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC32022 'Public Event DataReceived As SerialDataReceivedEventHandler' es un evento y no se puede llamar directamente. Use una instrucción 'RaiseEvent' para generar un evento. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb 48 Activo
Hay otra parte del código que traduce bien en teoría, pero hay muchos peros, da errores en VB .net.
De C#:
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
string[] data = indata.Split('A');
cantidadBytes = int.Parse(data[0]);
switch (data[1].ToString())
{
case "1":
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
break;
case "2":
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
break;
default:
Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
break;
}
Dim sp As SerialPort = DirectCast(sender, SerialPort)
Dim indata As String = sp.ReadExisting()
Dim data As String() = indata.Split("A"C)
cantidadBytes = Integer.Parse(data(0))
Select Case data(1).ToString()
Case "1"
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: JPG")
Exit Select
Case "2"
Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.")
Console.WriteLine("Foto: " + data(1) + ". Tipo de archivo: PNG.")
Exit Select
Case Else
Console.WriteLine("Cosas raras en 'data': " + data.ToString())
' Por si hal algún error.
Exit Select
End Select
(http://www.subeimagenes.com/img/sdfsd-1718937.png)
El código es muy largo, si quieren lo pongo, pero no intenten traducirlo de golpe todo porque no funcionará.
Gracias.
Cita de: Meta en 21 Marzo 2017, 15:39 PMEl código es muy grande y no traduce bien todo. Voy partes por partes como este y este no convierte.
Puerto_serie.DataReceived += New SerialDataReceivedEventHandler(DataReceivedHandler)
En VB.NET, para asociar eventos en tiempo de ejecución se hace con las sentencias
AddHandler y
AddressOf.
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
Pero a diferencia de C# en VB.NET esto es algo opcional, no es necesario asociarlo de esa manera a menos que el objeto en cuestión haya sido creado en tiempo de ejecución. En su lugar puedes usar al keyword
Handles:
Private Sub Puerto_serie_DataReceived(ByVal sender As Object, ByVal e As DataReceivedHandler) Handles Puerto_serie.DataReceived
' ...
End Sub
string[] data = indata.Split('A');
Dim data As String() = indata.Split("A"c)
Esto ni siquiera tiene que ver con VB.NET. No existe ninguna sobrecarga del método String.Split en cuya firma acepte un caracter como parámetro, sino un array de caracteres. Al escribir "A"c se casteará automáticamente y puedes llamarlo así, pero no es un buen hábito hacerlo ya que no estás evitando el factor de error humano...
string[] data = indata.Split(new char[] { 'A' });
Dim data As String() = indata.Split( { "A"c } )
Cita de: Meta en 21 Marzo 2017, 15:39 PMHay otra parte del código que traduce bien en teoría, pero hay muchos peros, da errores en VB .net.
A diferencia de C#, en VB.NET las cadenas de texto se concatenan usando el operador
&, no
+, el cual es un operador aritmético de suma. Se puede concatenar en ciertas circunstancias pero dará problemas ya que no es su propósito.
Aparte de eso, en VB.NET no es necesario escribir al final la sentencia
Exit Select (
break en C#). La instrucción ya va implícita en el código compilado.
' Dim cantidadBytes As Integer
Dim sp As SerialPort = DirectCast(sender, SerialPort)
Dim indata As String = sp.ReadExisting()
Dim data As String() = indata.Split({"A"c})
cantidadBytes = Integer.Parse(data(0))
Select Case data(1).ToString()
Case "1"
Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: JPG")
Case "2"
Console.WriteLine("Tamaño: " & cantidadBytes & " Bytes.")
Console.WriteLine("Foto: " & data(1) & ". Tipo de archivo: PNG.")
Case Else
Console.WriteLine("Cosas raras en 'data': " & data.ToString())
End Select
De todas formas tanto en C# como en VB.NET la concatenación tradicional (y fea) de strings puedes evitarlo, utilizando el método String.Format():
Console.WriteLine(String.Format("Foto: {0}. Tipo de archivo: {1}.", data(1) ,"PNG"))
Todo lo que estás preguntando son cosas básicas que podrías averiguar con dos minutos en Google o leyendo la referencia de VB.NET y su modo de empleo en MSDN, hay ejemplos para todo.
Hola:
Parece que va cogiendo forma, aún así hay dos errores que no me deja en paz.
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
Concretamente el Me.
https://msdn.microsoft.com/es-es/library/20fy88e0.aspx
CitarGravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC30043 'Me' solo es válido en un método de instancia. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\Module1.vb 49 Activo
Otro error es este:
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC30420 No se encontró 'Sub Main' en 'Recibir_archivo_desde_Arduino_consola_VB.Module1'. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\vbc 1 Activo
Llevo tiempo traquiniando y no lo campto.
Cita de: Meta en 23 Marzo 2017, 09:42 AMHola:
Parece que va cogiendo forma, aún así hay dos errores que no me deja en paz.
AddHandler Puerto_serie.DataReceived, AddressOf Me.Puerto_serie_DataReceived
Concretamente el Me.
https://msdn.microsoft.com/es-es/library/20fy88e0.aspx
Declara un método a nivel de clase, llámalo "Puerto_serie_DataReceived" y úsalo para controlar el evento Puerto_serie.DataReceived.
En mi respuesta de arriba te puse un ejemplo de eso mismo.
Cita de: Meta en 23 Marzo 2017, 09:42 AMOtro error es este:
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error BC30420 No se encontró 'Sub Main' en 'Recibir_archivo_desde_Arduino_consola_VB.Module1'. Recibir_archivo_desde_Arduino_consola_VB C:\Users\Usuario\documents\visual studio 2017\Projects\Recibir_archivo_desde_Arduino_consola_VB\Recibir_archivo_desde_Arduino_consola_VB\vbc 1 Activo
Llevo tiempo traquiniando y no lo campto.
El módulo principal de tu aplicación de consola necesita tener un punto de entrada (EntryPoint), tal y como en C#.
Module Module1
Public Sub Main()
' ...
End Sub
End Module
Saludos