elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 261
1  Programación / .NET (C#, VB.NET, ASP) / Re: Bordes redondeado de un cuadrado o rectáncugo. en: 15 Noviembre 2024, 08:23 am
Una cosa más.

Si te fijas en estos dos símbolos de las esquinas como este ┌  y este otro de doble línea ╔, el borde una lía es este ╭, pero no hay de doble línea. También busco este.

¿Hay otra tabla de codificación que lo incluya o no existe?

Por ahora solo veo este.
https://unicode.org/charts/nameslist/n_2500.html

A lo mejor hay otros por ahí que no se.

Saludos y muchas gracias.
2  Programación / .NET (C#, VB.NET, ASP) / El depurador ahora muestra valores devueltos insertados con ayuda de IA para mejorar la eficacia. en: 14 Noviembre 2024, 10:50 am
Hola gente:

¿Cómo están todos?  ;-)


Actualizado el Visual Studio Community 2022 (Gratuito), por ahora no se ha nombrado uno nuevo completo.

Una de las novedades de ahora es esto indicado abajo.

El depurador de Visual Studio muestra ahora valores insertados para las instrucciones de devolución, respondiendo así a una de las características más solicitadas por la comunidad de desarrolladores.

Esta mejora le permite ver los valores exactos que devuelven las funciones directamente en el código, eliminando la necesidad de código adicional o variables temporales para inspeccionar los valores de devolución.


Valores devueltos insertados

Con GitHub Copilot, puede ir más allá utilizando la opción Preguntar a Copilot al mantener el mouse para analizar los valores devueltos directamente en Visual Studio, lo que le permite abordar los problemas de inmediato.

Se admite tanto en código nativo como administrado.


Por curiosidad hice este ejemplo en C# y no me funciona.

Código
  1. using System;
  2.  
  3. namespace Metodo_Consola_01
  4. {
  5.    internal class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            int resultado = Sumar(5, 10);
  10.            Console.WriteLine($"El resultado de la suma es: {resultado}.");
  11.  
  12.            // Pulse cualquier tecla para salir.
  13.            Console.ReadKey();
  14.        }
  15.        static int Sumar(int a, int b)
  16.        {
  17.            return a + b;
  18.        }
  19.    }
  20. }

Al compilar funciona y el resultado da 15.

Se trata de pasar el ratón por encima del IDE sin compilar nada y muestra los resultados.

A mi no me funciona ni a la de tres.

¿A alguien le ha funcionado?

Gracias.
3  Programación / Programación C/C++ / Re: Controlar variable en: 2 Noviembre 2024, 11:18 am
Vaya, estoy cegato, culpa mia.   :o :o :o :o
4  Programación / Programación C/C++ / Re: Controlar variable en: 2 Noviembre 2024, 10:24 am
Viendo este enlace.

https://learn.microsoft.com/es-es/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?view=msvc-170&f1url=%3FappId%3DDev17IDEF1%26l%3DES-ES%26k%3Dk(C4996)%26rd%3Dtrue

cambiar de strncpy a este strncpy_s.

Solo tenías que haberlo dicho así tal cual.  ;-) ;-) ;-) ;-)

Aún así, muchas gracias, ahora compila.

1. Uso de
strncpy_s
: Esta función toma como argumentos el destino, el tamaño del destino, la cadena de origen y un valor que indica cómo manejar el truncamiento. Usar
_TRUNCATE
asegura que la cadena se trunque si es demasiado larga.

2. Terminación de la cadena: La línea
lectura[n] = '\0';
puede no ser necesaria si
strncpy_s
ya se encarga de ello, pero si
n
es menor que la longitud de la cadena copiada, asegúrate de que la cadena esté correctamente terminada.

3. Incluir
: Asegúrate de incluir la cabecera
para poder usar
cout
.

Si prefieres desactivar la advertencia en lugar de cambiar el código, puedes agregar
#define _CRT_SECURE_NO_WARNINGS
al inicio de tu archivo, pero no es la mejor práctica, ya que podrías perder las ventajas

 :D
5  Programación / Programación C/C++ / Re: Controlar variable en: 1 Noviembre 2024, 23:50 pm
#include <stdio.h>
#include <string.h>

Si te refieres a esto, lo he puesto y sigue igual.
6  Programación / Programación C/C++ / Re: Controlar variable en: 1 Noviembre 2024, 11:39 am
Hice un ejemplo pero como que no.

Código
  1. int main()
  2. {
  3.    char lectura[50] = { 0 };
  4.    // Supongamos que has recibido datos y n es el número de bytes leídos
  5.    int n = 20; // Por ejemplo, supongamos que leíste 20 bytes
  6.    strncpy(lectura, "ON - Led encendido.", sizeof(lectura) - 1); // Simulando la lectura
  7.    lectura[n] = '\0'; // Asegúrate de terminar la cadena
  8.  
  9.    // Ahora puedes comparar la cadena
  10.    if (strcmp(lectura, "ON - Led encendido.") == 0) {
  11.        cout << "Recibido: " << lectura << endl;
  12.    }
  13.    else {
  14.        cout << "No se recibió el mensaje esperado." << endl;
  15.    }
  16.  
  17.    return 0;
  18. }

Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido   Detalles
Error   C4996   'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.   Datos de entrada puerto serie CPP nativo Consola 01   D:\Visual Studio 2022\Datos de entrada puerto serie CPP nativo Consola 01\Datos de entrada puerto serie CPP nativo Consola 01\Datos de entrada puerto serie CPP nativo Consola 01.cpp   51      
7  Programación / Programación C/C++ / Controlar variable en: 31 Octubre 2024, 18:15 pm
Tengo esta variable declarada en C++ nativo con Visual Community 2022.

Código
  1. char lectura[50] = { 0 };

Al recibir datos, parece que como máximo recibo 50 caracteres o bytes.

Código
  1.        if (n > 0)
  2.        {
  3.            lectura[n] = '\0'; // Finaliza la cadena.
  4.  
  5.            cout << "Recibido: " << lectura << endl;
  6.            cout << "-------------------" << endl;
  7.        }

El dato que recibo por ejemplo debe ser exactamente esto:

ON - Led encendido.

Si miro la variable en el IDE, me muestra esto:


Ver zoom.

Al recibir esos datos quiero hacer algo como esto:
Código
  1.            if (lectura == "ON - Led encendido.")
  2.            {
  3.                cout << "Recibido: " << lectura << endl;
  4.            }

¿Hay alguna manera de quitar los 0'\0' datos restantes que molestan?

Saludos.
8  Programación / Programación C/C++ / Usar switch o otra manera para poner en gotoXY textos en: 29 Octubre 2024, 07:01 am
Buenas camaradas:

Usando este código. Recibo datos por el puerto serie.

Código
  1.        // Lee datos del puerto serie.
  2.        int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie.
  3.  
  4.        if (n > 0)
  5.        {
  6.            lectura[n] = '\0'; // Finaliza la cadena.
  7.  
  8.            switch (lectura)
  9.            {
  10.  
  11.            default:
  12.                break;
  13.            }
  14.  
  15.            cout << "Recibido: " << lectura << endl;
  16.            cout << "-------------------" << endl;
  17.        }

Justo en switch (lectura) me da error de este tipo.

Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido   Detalles
Error   C2450   una expresión switch de tipo "char [50]" no es válida   Arduino y puerto serie CPP Consola 01   D:\Visual Studio 2022\Arduino y puerto serie CPP Consola 01\Arduino y puerto serie CPP Consola 01\Arduino y puerto serie CPP Consola 01.cpp   114      


Dentro de los case quiero poner sus coordenadas para poner los textos en cualquier zona de la pantalla con gotoXY que es este.

Código
  1. // Función posición del cursor.
  2. void gotoxy(int ancho_x, int alto_y)
  3. {
  4. HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  5. COORD dwPos{};
  6. dwPos.X = ancho_x;
  7. dwPos.Y = alto_y;
  8. SetConsoleCursorPosition(hcon, dwPos);
  9. }

¿Alguna solución?

Código C++ nativo completo hecho con Visual Studio 2022.
Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3. #include "SerialClass.h"
  4.  
  5. using namespace std;
  6. //using std::cout;
  7. //using std::cin;
  8.  
  9. void ConfigurarConsola()
  10. {
  11. #pragma region "Configuración ventana."
  12.    // Mostrar caracteres correctamente en pantalla y título de la ventana.
  13.    SetConsoleOutputCP(CP_UTF8);
  14.    wchar_t titulo[128];
  15.    MultiByteToWideChar(CP_UTF8, 0, "Título: Arduino puerto serie - C++ nativo", -1, titulo, 128);
  16.    SetConsoleTitleW(titulo);
  17.  
  18.    // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  19.    SMALL_RECT r = { 0, 0, 120, 40 }; // X = 80, Y = 20.
  20.    SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  21.  
  22.    // Cambio color de fondo 6 (amarillo / naranja), color letras 0 (negro).
  23.    system("color 60"); // Color de fonde y texto.
  24.  
  25.    // Ocultar cursor.
  26.    CONSOLE_CURSOR_INFO cci;
  27.    GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  28.    cci.bVisible = FALSE; // FALSE oculta. TRUE muestra cursor.
  29.    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  30. #pragma endregion
  31. }
  32.  
  33. // Función posición del cursor.
  34. void gotoxy(int ancho_x, int alto_y)
  35. {
  36. HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  37. COORD dwPos{};
  38. dwPos.X = ancho_x;
  39. dwPos.Y = alto_y;
  40. SetConsoleCursorPosition(hcon, dwPos);
  41. }
  42.  
  43. int main()
  44. {
  45.    // Configura consola.
  46.    ConfigurarConsola();
  47.  
  48.    // Inicializa el puerto serie.
  49.    Serial* Puerto = new Serial("COM2");
  50.  
  51.    if (!Puerto->IsConnected())
  52.    {
  53.        cerr << "Error al conectar con el puerto serie." << endl;
  54.        delete Puerto;
  55.        return 1;
  56.    }
  57.  
  58.    // Comandos para Arduino.
  59.    char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie.
  60.    char Luz_OFF[] = "Luz_OFF";
  61.    char Salir[] = "Salir";
  62.    char lectura[50] = { 0 }; // Guardan datos de entrada del puerto leído.
  63.  
  64.    //int tecla; // Guarda un 1 ó 2 tipo entero que introduces desde la consola.
  65.  
  66.    cout << "Pulse 1 para encender el Led, pulse 2 para apagar. (Ctrl+C para salir)" << endl;
  67.  
  68.    while (true) {
  69.        // Detecta si se ha pulsado una tecla. Desde que pulse una tecla, automáticamente envía el comando.
  70.  
  71.        // ¿Has pulsado la tecla 1 ó 1 extendido?
  72.        if (GetAsyncKeyState('1') & 0x8000 || GetAsyncKeyState(VK_NUMPAD1) & 0x8000) // Si se presiona '1' o 'Numpad 1'.
  73.        {
  74.            // Sí. Envía este comando.
  75.            cout << "Enviando: " << Luz_ON << endl;
  76.            Puerto->WriteData(Luz_ON, strlen(Luz_ON));
  77.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  78.        }
  79.  
  80.        if (GetAsyncKeyState('2') & 0x8000 || GetAsyncKeyState(VK_NUMPAD2) & 0x8000) // Si se presiona '2' o 'Numpad 2'.
  81.        {
  82.            cout << "Enviando: " << Luz_OFF << endl;
  83.            Puerto->WriteData(Luz_OFF, strlen(Luz_OFF));
  84.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  85.        }
  86.  
  87.        if (GetAsyncKeyState('3') & 0x8000 || GetAsyncKeyState(VK_NUMPAD3) & 0x8000)
  88.        {
  89.            cout << "Enviando: " << Salir << endl;
  90.            Puerto->WriteData(Salir, strlen(Salir));
  91.            Sleep(500); // Espera un momento para evitar múltiples envíos.
  92.        }
  93.  
  94.        // Lee datos del puerto serie.
  95.        int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie.
  96.  
  97.        if (n > 0)
  98.        {
  99.            lectura[n] = '\0'; // Finaliza la cadena.
  100.            cout << "Recibido: " << lectura << endl;
  101.            cout << "-------------------" << endl;
  102.        }
  103.  
  104.        Sleep(100); // Reduce la carga de CPU.
  105.    }
  106.  
  107.    delete Puerto; // Libera memoria.
  108.  
  109.    return 0;
  110. }


Saludos.
9  Programación / Programación C/C++ / Re: ERROR C2665 'Serial::Serial':ninguna función sobrecargada pudo convertir todos los tipos de argumento en: 28 Octubre 2024, 07:11 am
 ;-) ;-) ;-) ;-)
10  Programación / Programación C/C++ / Re: ERROR C2665 'Serial::Serial':ninguna función sobrecargada pudo convertir todos los tipos de argumento en: 28 Octubre 2024, 00:51 am
Había que ponerlo aquí. Ahora me funciona.

Código
  1. #include "SerialClass.h"
  2.  
  3. Serial::Serial(const char *portName)
  4. {
  5.    //We're not yet connected
  6.    this->connected = false;
  7.  
  8.    //Try to connect to the given port throuh CreateFile
  9.    this->hSerial = CreateFile(portName,
  10.            GENERIC_READ | GENERIC_WRITE,
  11.            0,
  12.            NULL,
  13.            OPEN_EXISTING,
  14.            FILE_ATTRIBUTE_NORMAL,
  15.            NULL);
  16.  
  17.    //Check if the connection was successfull
  18.    if(this->hSerial==INVALID_HANDLE_VALUE)
  19.    {
  20.        //If not success full display an Error
  21.        if(GetLastError()==ERROR_FILE_NOT_FOUND){
  22.  
  23.            //Print Error if neccessary
  24.            printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);
  25.  
  26.        }
  27.        else
  28.        {
  29.            printf("ERROR!!!");
  30.        }
  31.    }
  32.    else
  33.    {
  34.        //If connected we try to set the comm parameters
  35.        DCB dcbSerialParams = {0};
  36.  
  37.        //Try to get the current
  38.        if (!GetCommState(this->hSerial, &dcbSerialParams))
  39.        {
  40.            //If impossible, show an error
  41.            printf("failed to get current serial parameters!");
  42.        }
  43.        else
  44.        {
  45.            //Define serial connection parameters for the arduino board
  46.            dcbSerialParams.BaudRate=CBR_115200;
  47.            dcbSerialParams.ByteSize=8;
  48.            dcbSerialParams.StopBits=ONESTOPBIT;
  49.            dcbSerialParams.Parity=NOPARITY;
  50.  
  51.             //Set the parameters and check for their proper application
  52.             if(!SetCommState(hSerial, &dcbSerialParams))
  53.             {
  54.                printf("ALERT: Could not set Serial Port parameters");
  55.             }
  56.             else
  57.             {
  58.                 //If everything went fine we're connected
  59.                 this->connected = true;
  60.                 //We wait 2s as the arduino board will be reseting
  61.                 Sleep(ARDUINO_WAIT_TIME);
  62.             }
  63.        }
  64.    }
  65.  
  66. }
  67.  
  68. Serial::~Serial()
  69. {
  70.    //Check if we are connected before trying to disconnect
  71.    if(this->connected)
  72.    {
  73.        //We're no longer connected
  74.        this->connected = false;
  75.        //Close the serial handler
  76.        CloseHandle(this->hSerial);
  77.    }
  78. }
  79.  
  80. int Serial::ReadData(char *buffer, unsigned int nbChar)
  81. {
  82.    //Number of bytes we'll have read
  83.    DWORD bytesRead;
  84.    //Number of bytes we'll really ask to read
  85.    unsigned int toRead;
  86.  
  87.    //Use the ClearCommError function to get status info on the Serial port
  88.    ClearCommError(this->hSerial, &this->errors, &this->status);
  89.  
  90.    //Check if there is something to read
  91.    if(this->status.cbInQue>0)
  92.    {
  93.        //If there is we check if there is enough data to read the required number
  94.        //of characters, if not we'll read only the available characters to prevent
  95.        //locking of the application.
  96.        if(this->status.cbInQue>nbChar)
  97.        {
  98.            toRead = nbChar;
  99.        }
  100.        else
  101.        {
  102.            toRead = this->status.cbInQue;
  103.        }
  104.  
  105.        //Try to read the require number of chars, and return the number of read bytes on success
  106.        if(ReadFile(this->hSerial, buffer, toRead, &bytesRead, NULL) && bytesRead != 0)
  107.        {
  108.            return bytesRead;
  109.        }
  110.  
  111.    }
  112.  
  113.    //If nothing has been read, or that an error was detected return -1
  114.    return -1;
  115.  
  116. }
  117.  
  118.  
  119. bool Serial::WriteData(char *buffer, unsigned int nbChar)
  120. {
  121.    DWORD bytesSend;
  122.  
  123.    //Try to write the buffer on the Serial port
  124.    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
  125.    {
  126.        //In case it don't work get comm error and return false
  127.        ClearCommError(this->hSerial, &this->errors, &this->status);
  128.  
  129.        return false;
  130.    }
  131.    else
  132.        return true;
  133. }
  134.  
  135. bool Serial::IsConnected()
  136. {
  137.    //Simply return the connection status
  138.    return this->connected;
  139. }

Muchas gracias mi muy distinguido amigo.
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 261
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines