none
Corregir errores de C++ RRS feed

  • Pregunta

  • Hola:

    Pasé de este código de C# a C++ CLR. Me da fallos y no se como solucionarlos.

    Códigos en C#:

    using System;
    using System.Text;
    using System.IO.Ports;
    
    namespace Envio_y_recepcion_puerto_serie_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Recibir datos desde Arduino con C#";
    
                // Tamaño ventana consola.
                Console.WindowWidth = 55; // X. Ancho.
                Console.WindowHeight = 18; // Y. Alto.
    
                // Cree un nuevo objeto SerialPort con la configuración predeterminada.
                SerialPort Puerto_serie = new SerialPort("COM4");
    
                Puerto_serie.BaudRate = 115200;
                Puerto_serie.Parity = Parity.None;
                Puerto_serie.StopBits = StopBits.One;
                Puerto_serie.DataBits = 8;
                Puerto_serie.Handshake = Handshake.None;
                Puerto_serie.RtsEnable = true;
    
                // Establecer los tiempos de espera de lectura / escritura.
                Puerto_serie.ReadTimeout = 500; // Milisegundos.
                Puerto_serie.WriteTimeout = 500;
    
                // Detecta cualquier dato recibido.
                Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    
                Puerto_serie.Open(); // Abrir puerto.
    
                ConsoleKey tecla;
                Console.WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
    
                do
                {
                    tecla = Console.ReadKey(true).Key; // Espera pulsación de teclas.
    
                    switch (tecla)
                    {
                        case ConsoleKey.D1: // Tecla 1 del teclado estandar.
                        case ConsoleKey.NumPad1: // Tecla 1 del número del pad.
                            byte[] miBuffer1 = Encoding.ASCII.GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
                            Puerto_serie.Write(miBuffer1, 0, miBuffer1.Length); // Envía los datos del buffer todo su contenido.
                            Console.WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
                            break;
    
                        case ConsoleKey.D2:
                        case ConsoleKey.NumPad2:
                            byte[] miBuffer2 = Encoding.ASCII.GetBytes("Luz_OFF");
                            Puerto_serie.Write(miBuffer2, 0, miBuffer2.Length);
                            Console.WriteLine("Comando \"Luz_OFF\" enviado.");
                            break;
    
                        default:
                            Console.WriteLine("Tecla el 1, el 2 y Escape para salir.");
                            break;
                    }
                } while (tecla != ConsoleKey.Escape); // Pulsa Escape para salir del menú.
    
                Console.WriteLine("Presione cualquier tecla para terminar...");
                Console.WriteLine();
                Console.ReadKey(); // Espera pulsar una tecla cualquiera.
                Puerto_serie.Close(); // Cierra el puerto serie.
            }
    
        // Detecta cualquier dato entrante.
        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
                Console.WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.
            }
        }
    }


    Código C++ mal hecho:

    #include "stdafx.h"
    #using <System.dll>
    
    using namespace System;
    using namespace System::Text;
    using namespace System::IO::Ports;
    
    int main(array<System::String ^> ^args)
    {
    	// Título de la ventana.
    	Console::Title = "Recibir datos desde Arduino con C++ CLR";
    
    	// Tamaño ventana consola.
    	Console::WindowWidth = 55; // X. Ancho.
    	Console::WindowHeight = 18; // Y. Alto.
    
    	SerialPort^ Puerto_serie = gcnew SerialPort("COM4");
    
    	Puerto_serie->BaudRate = 115200;
    	Puerto_serie->Parity = Parity::None;
    	Puerto_serie->StopBits = StopBits::One;
    	Puerto_serie->DataBits = 8;
    	Puerto_serie->Handshake = Handshake::None;
    	Puerto_serie->RtsEnable = true;
    
    	Puerto_serie->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);
    
    	Puerto_serie->Open();
    
    	ConsoleKey tecla;
    	Console::WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
    
    	do
    	{
    		tecla = Console::ReadKey(true).Key; // Espera pulsación de teclas.
    
    		switch (tecla)
    		{
    		case ConsoleKey::D1: // Tecla 1 del teclado estandar.
    		case ConsoleKey::NumPad1: // Tecla 1 del número del pad.
    			
    			array<Byte> ^miBuffer1 = Encoding::ASCII->GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
    			Puerto_serie->Write(miBuffer1, 0, miBuffer1->Length); // Envía los datos del buffer todo su contenido.
    			Console::WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
    			break;
    
    		case ConsoleKey::D2:
    		case ConsoleKey::NumPad2:
    			array<Byte> ^miBuffer2 = Encoding::ASCII->GetBytes("Luz_OFF");
    			Puerto_serie->Write(miBuffer2, 0, miBuffer2->Length);
    			Console::WriteLine("Comando \"Luz_OFF\" enviado.");
    			break;
    
    		default:
    			Console::WriteLine("Tecla el 1, el 2 y Escape para salir.");
    			break;
    		}
    	} while (tecla != ConsoleKey::Escape); // Pulsa Escape para salir del menú.
    
    	Console::WriteLine("Presione cualquier tecla para terminar...");
    	Console::WriteLine();
    	Console::ReadKey(); // Espera pulsar una tecla cualquiera.
    	Puerto_serie->Close(); // Cierra el puerto serie.
    
    
    						   // Detecta cualquier dato entrante.
    
    private: static void DataReceivedHandler(Object^ sender, SerialDataReceivedEventArgs^ e)
    	{
    		SerialPort sp = (SerialPort)sender;
    		string entradaDatos = sp.ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
    		Console::WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.;
    	}
    };


    Es en modo consola C++ CLR.

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta lunes, 31 de julio de 2017 12:46
    lunes, 31 de julio de 2017 12:20

Respuestas

  • Deleted
    • Marcado como respuesta Metaconta martes, 1 de agosto de 2017 1:09
    lunes, 31 de julio de 2017 20:15
  • Ya lo hice y gracias.

    #include "stdafx.h"
    #using <System.dll>
    
    using namespace System;
    using namespace System::Text;
    using namespace System::IO::Ports;
    
    ref class PortDataReceived
    {
    public:
    	static void Main()
    	{
    		// Título de la ventana.
    		Console::Title = "Recibir datos desde Arduino con C++ CLR";
    
    		// Tamaño ventana consola.
    		Console::WindowWidth = 55; // X. Ancho.
    		Console::WindowHeight = 18; // Y. Alto.
    
    		SerialPort^ Puerto_serie = gcnew SerialPort("COM4");
    
    		Puerto_serie->BaudRate = 115200;
    		Puerto_serie->Parity = Parity::None;
    		Puerto_serie->StopBits = StopBits::One;
    		Puerto_serie->DataBits = 8;
    		Puerto_serie->Handshake = Handshake::None;
    		Puerto_serie->RtsEnable = true;
    
    		Puerto_serie->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);
    
    		Puerto_serie->Open(); // Abrir puerto.
    
    		ConsoleKey tecla;
    		Console::WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
    
    		do
    		{
    			tecla = Console::ReadKey(true).Key; // Espera pulsación de teclas.
    
    			switch (tecla)
    			{
    
    			case ConsoleKey::D1: // Tecla 1 del teclado estandar.
    			case ConsoleKey::NumPad1: // Tecla 1 del número del pad.
    			{
    				array<Byte> ^miBuffer1 = Encoding::ASCII->GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
    				Puerto_serie->Write(miBuffer1, 0, miBuffer1->Length); // Envía los datos del buffer todo su contenido.
    				Console::WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
    				break;
    			}
    
    
    			case ConsoleKey::D2:
    			case ConsoleKey::NumPad2:
    			{
    				array<Byte> ^miBuffer2 = Encoding::ASCII->GetBytes("Luz_OFF");
    				Puerto_serie->Write(miBuffer2, 0, miBuffer2->Length);
    				Console::WriteLine("Comando \"Luz_OFF\" enviado.");
    				break;
    			}
    
    			default:
    			{
    					Console::WriteLine("Tecla el 1, el 2 y Escape para salir.");
    					break;
    				}
    			}
    		} 
    		
    		while (tecla != ConsoleKey::Escape); // Pulsa Escape para salir del menú.
    
    		Console::WriteLine("Presione cualquier tecla para terminar...");
    		Console::WriteLine();
    		Console::ReadKey(); // Espera pulsar una tecla cualquiera.
    		Puerto_serie->Close(); // Cierra el puerto serie.
    
    	}
    							   
    	// Detecta cualquier dato entrante.
    	private:
    		static void DataReceivedHandler(Object^ sender, SerialDataReceivedEventArgs^ e)
    		{
    			SerialPort^ sp = (SerialPort^)sender;
    			String^ entradaDatos = sp->ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
    			Console::WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.;
    		}	
    };
    
    int main(array<System::String ^> ^args)
    {
    	PortDataReceived::Main();
    }


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta martes, 1 de agosto de 2017 1:09
    martes, 1 de agosto de 2017 1:09

Todas las respuestas

  • Deleted
    • Marcado como respuesta Metaconta martes, 1 de agosto de 2017 1:09
    lunes, 31 de julio de 2017 20:15
  • Ya lo hice y gracias.

    #include "stdafx.h"
    #using <System.dll>
    
    using namespace System;
    using namespace System::Text;
    using namespace System::IO::Ports;
    
    ref class PortDataReceived
    {
    public:
    	static void Main()
    	{
    		// Título de la ventana.
    		Console::Title = "Recibir datos desde Arduino con C++ CLR";
    
    		// Tamaño ventana consola.
    		Console::WindowWidth = 55; // X. Ancho.
    		Console::WindowHeight = 18; // Y. Alto.
    
    		SerialPort^ Puerto_serie = gcnew SerialPort("COM4");
    
    		Puerto_serie->BaudRate = 115200;
    		Puerto_serie->Parity = Parity::None;
    		Puerto_serie->StopBits = StopBits::One;
    		Puerto_serie->DataBits = 8;
    		Puerto_serie->Handshake = Handshake::None;
    		Puerto_serie->RtsEnable = true;
    
    		Puerto_serie->DataReceived += gcnew SerialDataReceivedEventHandler(DataReceivedHandler);
    
    		Puerto_serie->Open(); // Abrir puerto.
    
    		ConsoleKey tecla;
    		Console::WriteLine("Pulse tecla 1 para encender y 2 para apagar:");
    
    		do
    		{
    			tecla = Console::ReadKey(true).Key; // Espera pulsación de teclas.
    
    			switch (tecla)
    			{
    
    			case ConsoleKey::D1: // Tecla 1 del teclado estandar.
    			case ConsoleKey::NumPad1: // Tecla 1 del número del pad.
    			{
    				array<Byte> ^miBuffer1 = Encoding::ASCII->GetBytes("Luz_ON"); // Codificación ASCII y guarda en la variable array tipo byte.
    				Puerto_serie->Write(miBuffer1, 0, miBuffer1->Length); // Envía los datos del buffer todo su contenido.
    				Console::WriteLine("Comando \"Luz_ON\" enviado."); // Muestra en pantalla comandos enviado.
    				break;
    			}
    
    
    			case ConsoleKey::D2:
    			case ConsoleKey::NumPad2:
    			{
    				array<Byte> ^miBuffer2 = Encoding::ASCII->GetBytes("Luz_OFF");
    				Puerto_serie->Write(miBuffer2, 0, miBuffer2->Length);
    				Console::WriteLine("Comando \"Luz_OFF\" enviado.");
    				break;
    			}
    
    			default:
    			{
    					Console::WriteLine("Tecla el 1, el 2 y Escape para salir.");
    					break;
    				}
    			}
    		} 
    		
    		while (tecla != ConsoleKey::Escape); // Pulsa Escape para salir del menú.
    
    		Console::WriteLine("Presione cualquier tecla para terminar...");
    		Console::WriteLine();
    		Console::ReadKey(); // Espera pulsar una tecla cualquiera.
    		Puerto_serie->Close(); // Cierra el puerto serie.
    
    	}
    							   
    	// Detecta cualquier dato entrante.
    	private:
    		static void DataReceivedHandler(Object^ sender, SerialDataReceivedEventArgs^ e)
    		{
    			SerialPort^ sp = (SerialPort^)sender;
    			String^ entradaDatos = sp->ReadExisting(); // Almacena los datos recibidos en la variable tipo string.
    			Console::WriteLine("Dato recibido desde Arduino: " + entradaDatos); // Muestra en pantalla los datos recibidos.;
    		}	
    };
    
    int main(array<System::String ^> ^args)
    {
    	PortDataReceived::Main();
    }


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta martes, 1 de agosto de 2017 1:09
    martes, 1 de agosto de 2017 1:09