none
Pasar este código de C# a C++ RRS feed

  • Pregunta

  • Hola:

    Teniendo el código bajo C# y este otro bajo VB,  ahora quiero adaptarlo a C++ 2013 Express. C++ es el menos que conozco.

    Código C#:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace ZyXEL
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button_Generar_Click(object sender, EventArgs e)
            {
                try
                {
                    textBox_Password.Text = Calculo_Password(textBox_seedNumber.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                } 
            }
    
            private string Calculo_Password(string seedNumber)
            {
                int num = Convert.ToInt32(seedNumber.Substring(0, 6), 0x10);
                int num2 = num + 0x10f0a563;
                int num3 = Convert.ToInt32(seedNumber.Substring(10, 2), 0x10) & 7;
                int num4 = (num2 >> num3) | (num2 << (0x20 - num3));
                num4 ^= num;
                return num4.ToString("X");
            } 
        }
    }
    


    Código VB 2013.

    Public Class Form1
    
        Private Sub Button_Generar_Click(sender As Object, e As EventArgs) Handles Button_Generar.Click
            Try
                textBox_Password.Text = Calculo_Password(textBox_seedNumber.Text)
            Catch ex As Exception
                MessageBox.Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            End Try
        End Sub
    
        Private Function Calculo_Password(seedNumber As String) As String
            Dim num As Integer = Convert.ToInt32(seedNumber.Substring(0, 6), &H10)
            Dim num2 As Integer = num + &H10F0A563
            Dim num3 As Integer = Convert.ToInt32(seedNumber.Substring(10, 2), &H10) And 7
            Dim num4 As Integer = (num2 >> num3) Or (num2 << (&H20 - num3))
            num4 = num4 Xor num
            Return num4.ToString("X")
        End Function
    End Class

    Los dos de arriba funcionan muy bien. Sólo me falta adaptarlo al C++. Me parece más complicado que vb en algunos sentidos.

    Al usar Visual C++ como proyecto nuevo, no encuentro como en C# y VB 2013 para programarlo como Form1. ¿Para empezar, en qué parte debo elegir algo parecido a Windows Form?

    A parte de ello, el código.

    Un saludo.


    http://electronica-pic.blogspot.com

    sábado, 1 de febrero de 2014 21:06

Respuestas

  • Hola.

    Las versiones de Visual Studio 2013 ya no soportan WinForms con C++/CLI. La última en hacerlo fue la versión 2010, tanto Express como de pago.

    Según Microsoft, C++/CLI se queda para interop sin atributos entre código C/C++ clásico y .NET. Es decir, sólo permite crear DLL que envuelvan otra DLL escrita en C ó C++ nativo.

    La evolución es C++/CX, que es nativo y sólo sirve para crear aplicaciones de la tienda (Modern UI).


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta Metaconta domingo, 9 de febrero de 2014 13:26
    martes, 4 de febrero de 2014 9:34
    Moderador
  • Sí, CLR de consola sí que sigue habiendo, incluso en Visual Studio 2013.

    Lo que no he probado es a construir un Form desde cero y ocultar la consola con algo similar a lo explicado aquí: 

    http://stackoverflow.com/questions/3571627/show-hide-the-console-window-of-a-c-sharp-console-application

    A ver si saco un rato y lo pruebo. En caso de funcionar sería cosa de hacerlo todo con código, que no es sencillo. Personalmente creo que no valdría la pena, si necesitas algo de C/C++, pues haces el proyecto en C# y luego llamas a una DLL C++/CLI con lo que se necesite, aprovechando lo mejor de los dos mundos.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta Metaconta domingo, 9 de febrero de 2014 13:26
    miércoles, 5 de febrero de 2014 12:35
    Moderador

Todas las respuestas

  • Hola:

    No, no tiene c++/cli. No encuento el Form1 y nada.

    Cada vez veo a C++ que lo hacen peor o le quitan muchas cosas. ¿Falta interés o porque es la versión Espress 2013?

    En las otras versiones desde la 2008 tiene Windows Form y WPF. pero esta versión parece queno tiene nada, solo más bien aplicación de consola. Por algo será.Voy a probar el código haber que tal.

    ¿Las plantillas para el Form de antes se pueden descargar o conseguuir en algún lado?

    ¿Cómo se le ocurre quitar estas cosas?

    Saludo.

    Edito:

    Si no queda más remedio, lo haré en consola. Fijándome bien puedo escoger dos opiones, lo que no se cual es más recomendable.

    1) Aplicación de consola CLR.

    2) Aplicación de consola Win32.

    ¿Cuál es más recomendable y por qué?

    Saludo.


    http://electronica-pic.blogspot.com



    • Editado Metaconta lunes, 3 de febrero de 2014 9:31
    lunes, 3 de febrero de 2014 6:01
  • Hola.

    Las versiones de Visual Studio 2013 ya no soportan WinForms con C++/CLI. La última en hacerlo fue la versión 2010, tanto Express como de pago.

    Según Microsoft, C++/CLI se queda para interop sin atributos entre código C/C++ clásico y .NET. Es decir, sólo permite crear DLL que envuelvan otra DLL escrita en C ó C++ nativo.

    La evolución es C++/CX, que es nativo y sólo sirve para crear aplicaciones de la tienda (Modern UI).


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta Metaconta domingo, 9 de febrero de 2014 13:26
    martes, 4 de febrero de 2014 9:34
    Moderador
  • Hola:

    Entonces tendré que olvidarme sea de pago o Epress el C/C++ para Windows  Form. En cuanto a consola me imagino que se podrá hacer, algo es mejor que nada. Pregunto.

    Saludo.


    http://electronica-pic.blogspot.com

    martes, 4 de febrero de 2014 22:22
  • Sí, CLR de consola sí que sigue habiendo, incluso en Visual Studio 2013.

    Lo que no he probado es a construir un Form desde cero y ocultar la consola con algo similar a lo explicado aquí: 

    http://stackoverflow.com/questions/3571627/show-hide-the-console-window-of-a-c-sharp-console-application

    A ver si saco un rato y lo pruebo. En caso de funcionar sería cosa de hacerlo todo con código, que no es sencillo. Personalmente creo que no valdría la pena, si necesitas algo de C/C++, pues haces el proyecto en C# y luego llamas a una DLL C++/CLI con lo que se necesite, aprovechando lo mejor de los dos mundos.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    • Marcado como respuesta Metaconta domingo, 9 de febrero de 2014 13:26
    miércoles, 5 de febrero de 2014 12:35
    Moderador
  • Hola:

    Tenía intención de instalar el VC++ 2010 para hacer un proyecto sencillo como el indicado arriba, luego haber si es posible adaptarlo al 2012/13.

    Gracias el código que no sdejó el amigo Walter MDV

    System::Void Button_Generar_Click(System::Object^ sender, System::EventArgs^  e) 
    {
    	try
    	{
    		textBox_Password->Text = Calculo_Password(textBox_seedNumber->Text);
    	}
    	catch (Exception^ ex)
    	{
    		MessageBox::Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
    	} 
    }
    
    String^ Calculo_Password(String^ seedNumber)
    {
    	int num = Convert::ToInt32(seedNumber->Substring(0, 6), 0x10);
    	int num2 = num + 0x10f0a563;
    	int num3 = Convert::ToInt32(seedNumber->Substring(10, 2), 0x10) & 7;
    	int num4 = (num2 >> num3) | (num2 << (0x20 - num3));
    	num4 ^= num;
    	return num4.ToString("X");
    } 

    Se puede usar al menos en consola con CLR.

    Es una verdadera pena que luiten el Windows Form para VC++ 2012/13. Por algo será. Menos mal que en VB y C# sigue en pie.

    Un saludo.


    http://electronica-pic.blogspot.com

    miércoles, 5 de febrero de 2014 22:52
  • Hola RFOG:

    Después de tanto tiempo buscándote por el foro, te encuentro por casualidad y he creado hasta un tema nuevo que puedes ver aquí sobre Windows Form de Visual C++ 2013, al parecer lo he encontrado pero no funciona, ejjeje.

    Ver enlace.

    Quiero al menos una solución para resolver el problema bajo formulario Windows con Visual C++.

    Saludo.


    http://electronica-pic.blogspot.com

    jueves, 13 de marzo de 2014 14:45
  • Hola, chavalote.

    Pues yo sigo por aquí, pero como tengo poco tiempo pues tampoco es que responda mucho a las ya de por sí pocas preguntas que andan por aquí.

    En primer lugar no te recomiendo que intentes crear lo que no está soportado por Microsoft porque puede pasar cualquier cosa que a simple vista funcionan pero luego dejan de hacerlo.

    De todos modos, a ver si le echo un ojo a lo del hilo que enlazas y veo qué se puede hacer.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    viernes, 14 de marzo de 2014 15:33
    Moderador