|
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. using System; namespace Metodo_Consola_01 { internal class Program { static void Main(string[] args) { int resultado = Sumar(5, 10); Console.WriteLine($"El resultado de la suma es: {resultado}."); // Pulse cualquier tecla para salir. Console.ReadKey(); } static int Sumar(int a, int b) { return a + b; } } }
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.
|
|
|
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
|
|
|
6
|
Programación / Programación C/C++ / Re: Controlar variable
|
en: 1 Noviembre 2024, 11:39 am
|
Hice un ejemplo pero como que no. int main() { char lectura[50] = { 0 }; // Supongamos que has recibido datos y n es el número de bytes leídos int n = 20; // Por ejemplo, supongamos que leíste 20 bytes strncpy(lectura, "ON - Led encendido.", sizeof(lectura) - 1); // Simulando la lectura lectura[n] = '\0'; // Asegúrate de terminar la cadena // Ahora puedes comparar la cadena if (strcmp(lectura, "ON - Led encendido.") == 0) { cout << "Recibido: " << lectura << endl; } else { cout << "No se recibió el mensaje esperado." << endl; } return 0; }
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. char lectura[50] = { 0 };
Al recibir datos, parece que como máximo recibo 50 caracteres o bytes. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; }
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: if (lectura == "ON - Led encendido.") { cout << "Recibido: " << lectura << endl; }
¿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. // Lee datos del puerto serie. int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. switch (lectura) { default: break; } cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; }
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. // Función posición del cursor. void gotoxy(int ancho_x, int alto_y) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos{}; dwPos.X = ancho_x; dwPos.Y = alto_y; SetConsoleCursorPosition(hcon, dwPos); }
¿Alguna solución? Código C++ nativo completo hecho con Visual Studio 2022. #include <iostream> #include <windows.h> // Para mostrar texto en el título de la ventana. #include "SerialClass.h" using namespace std; //using std::cout; //using std::cin; void ConfigurarConsola() { #pragma region "Configuración ventana." // Mostrar caracteres correctamente en pantalla y título de la ventana. SetConsoleOutputCP(CP_UTF8); wchar_t titulo[128]; MultiByteToWideChar(CP_UTF8, 0, "Título: Arduino puerto serie - C++ nativo", -1, titulo, 128); SetConsoleTitleW(titulo); // Tamaño de la pantalla. Se cambia en los dos últimos dígitos. SMALL_RECT r = { 0, 0, 120, 40 }; // X = 80, Y = 20. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r); // Cambio color de fondo 6 (amarillo / naranja), color letras 0 (negro). system("color 60"); // Color de fonde y texto. // Ocultar cursor. CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); cci.bVisible = FALSE; // FALSE oculta. TRUE muestra cursor. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci); #pragma endregion } // Función posición del cursor. void gotoxy(int ancho_x, int alto_y) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); COORD dwPos{}; dwPos.X = ancho_x; dwPos.Y = alto_y; SetConsoleCursorPosition(hcon, dwPos); } int main() { // Configura consola. ConfigurarConsola(); // Inicializa el puerto serie. Serial* Puerto = new Serial("COM2"); if (!Puerto->IsConnected()) { cerr << "Error al conectar con el puerto serie." << endl; delete Puerto; return 1; } // Comandos para Arduino. char Luz_ON[] = "Luz_ON"; // Envía "Luz_ON" al puerto serie. char Luz_OFF[] = "Luz_OFF"; char Salir[] = "Salir"; char lectura[50] = { 0 }; // Guardan datos de entrada del puerto leído. //int tecla; // Guarda un 1 ó 2 tipo entero que introduces desde la consola. cout << "Pulse 1 para encender el Led, pulse 2 para apagar. (Ctrl+C para salir)" << endl; while (true) { // Detecta si se ha pulsado una tecla. Desde que pulse una tecla, automáticamente envía el comando. // ¿Has pulsado la tecla 1 ó 1 extendido? if (GetAsyncKeyState('1') & 0x8000 || GetAsyncKeyState(VK_NUMPAD1) & 0x8000) // Si se presiona '1' o 'Numpad 1'. { // Sí. Envía este comando. cout << "Enviando: " << Luz_ON << endl; Puerto->WriteData(Luz_ON, strlen(Luz_ON)); Sleep(500); // Espera un momento para evitar múltiples envíos. } if (GetAsyncKeyState('2') & 0x8000 || GetAsyncKeyState(VK_NUMPAD2) & 0x8000) // Si se presiona '2' o 'Numpad 2'. { cout << "Enviando: " << Luz_OFF << endl; Puerto->WriteData(Luz_OFF, strlen(Luz_OFF)); Sleep(500); // Espera un momento para evitar múltiples envíos. } if (GetAsyncKeyState('3') & 0x8000 || GetAsyncKeyState(VK_NUMPAD3) & 0x8000) { cout << "Enviando: " << Salir << endl; Puerto->WriteData(Salir, strlen(Salir)); Sleep(500); // Espera un momento para evitar múltiples envíos. } // Lee datos del puerto serie. int n = Puerto->ReadData(lectura, sizeof(lectura) - 1); // Recibe datos del puerto serie. if (n > 0) { lectura[n] = '\0'; // Finaliza la cadena. cout << "Recibido: " << lectura << endl; cout << "-------------------" << endl; } Sleep(100); // Reduce la carga de CPU. } delete Puerto; // Libera memoria. return 0; }
Saludos.
|
|
|
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. #include "SerialClass.h" Serial::Serial(const char *portName) { //We're not yet connected this->connected = false; //Try to connect to the given port throuh CreateFile this->hSerial = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //Check if the connection was successfull if(this->hSerial==INVALID_HANDLE_VALUE) { //If not success full display an Error if(GetLastError()==ERROR_FILE_NOT_FOUND){ //Print Error if neccessary printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName); } else { printf("ERROR!!!"); } } else { //If connected we try to set the comm parameters DCB dcbSerialParams = {0}; //Try to get the current if (!GetCommState(this->hSerial, &dcbSerialParams)) { //If impossible, show an error printf("failed to get current serial parameters!"); } else { //Define serial connection parameters for the arduino board dcbSerialParams.BaudRate=CBR_115200; dcbSerialParams.ByteSize=8; dcbSerialParams.StopBits=ONESTOPBIT; dcbSerialParams.Parity=NOPARITY; //Set the parameters and check for their proper application if(!SetCommState(hSerial, &dcbSerialParams)) { printf("ALERT: Could not set Serial Port parameters"); } else { //If everything went fine we're connected this->connected = true; //We wait 2s as the arduino board will be reseting Sleep(ARDUINO_WAIT_TIME); } } } } Serial::~Serial() { //Check if we are connected before trying to disconnect if(this->connected) { //We're no longer connected this->connected = false; //Close the serial handler CloseHandle(this->hSerial); } } int Serial::ReadData(char *buffer, unsigned int nbChar) { //Number of bytes we'll have read DWORD bytesRead; //Number of bytes we'll really ask to read unsigned int toRead; //Use the ClearCommError function to get status info on the Serial port ClearCommError(this->hSerial, &this->errors, &this->status); //Check if there is something to read if(this->status.cbInQue>0) { //If there is we check if there is enough data to read the required number //of characters, if not we'll read only the available characters to prevent //locking of the application. if(this->status.cbInQue>nbChar) { toRead = nbChar; } else { toRead = this->status.cbInQue; } //Try to read the require number of chars, and return the number of read bytes on success if(ReadFile(this->hSerial, buffer, toRead, &bytesRead, NULL) && bytesRead != 0) { return bytesRead; } } //If nothing has been read, or that an error was detected return -1 return -1; } bool Serial::WriteData(char *buffer, unsigned int nbChar) { DWORD bytesSend; //Try to write the buffer on the Serial port if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0)) { //In case it don't work get comm error and return false ClearCommError(this->hSerial, &this->errors, &this->status); return false; } else return true; } bool Serial::IsConnected() { //Simply return the connection status return this->connected; }
Muchas gracias mi muy distinguido amigo.
|
|
|
|
|
|
|