none
mostrar variable tipo char* en un textbox

    Question

  • Esto realizando un proyecto de Windows Forms en C++ y necesito mostrar por pantalla valores que me devuelve una función que son de tipo char*.
    En la consola win32 lo mostraba de la siguiente forma:
    char *valor="hola mundo";
     printf("value: %s",valor);

    Ahora uso un textbox,RichTextBox, o ListBox para  mostrar el texto.
    El tipo de datos a asignar al campo Text de estos controles es System::String , y nose como asignarles variables de otro tipo.
    con System::String::Format estuve lidiando un par de dias pero no se me ocurre una solución.

    muchas gracias

    Friday, March 05, 2010 1:17 PM

All replies

  • hola

    aconsejo que realices esta pregunta en el foro de c++
    muevo la pregunta a este foro

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Friday, March 05, 2010 1:19 PM
  • gracias por el cambio, a ver si aquí me pueden ayudar.
    Friday, March 05, 2010 4:43 PM
  • Hola David, me parece que buscas hacer algo como:


    using namespace System;

    int main()
    {
    String^ str = L"Hola mundo";
    Console::WriteLine(str);
    }


    ¿Es correcto?

    Por otra parte cualquier tipo de dato primitive lo puedes convertir a su
    representación en cadena a través del método ToString. Por ejemplo:


    Int32 i = 5;
    String^ str = i->ToString();
    Console::WriteLine(str);


    ¿Es esto lo que buscas?

    Saludos.

    From: Davidgen [mailto:=?utf-8?B?RGF2aWRnZW4=?=]
    Posted At: viernes, 05 de marzo de 2010 07:17 a.m.
    Posted To: Msdn.es-ES.vcppes
    Conversation: mostrar variable tipo char* en un textbox
    Subject: mostrar variable tipo char* en un textbox

    Esto realizando un proyecto de Windows Forms en C++ y necesito mostrar por
    pantalla valores que me devuelve una función que son de tipo char*.
    En la consola win32 lo mostraba de la siguiente forma:
    char *valor="hola mundo";
    printf("value: %s",valor);

    Ahora uso un textbox,RichTextBox, o ListBox para mostrar el texto.
    El tipo de datos a asignar al campo Text de estos controles es
    System::String , y nose como asignarles variables de otro tipo.
    con System::String::Format estuve lidiando un par de dias pero no se me
    ocurre una solución.

    muchas gracias



    Fernando Gómez
    www.fermasmas.com
    Friday, March 05, 2010 5:39 PM
  • muchas gracias por tu respuesta Fernando. Sin embargo, mi problema esactamente es que no puedo representar valores en un textbox de windows form. En tu respuestas explicas como hacer un Console::WriteLine(). Yo necesito lo siguiente:

    char *var="hola mundo";
    String^ str = var->ToString();
    Form1::textBox1->Text= str;


    Como puedes apreciar, use el código que me dijiste, y en este caso si me compila,pero  en el control textBox se muestra un 104, y no "hola mundo" que es lo que debería.

    Podría hacer una declaración de la forma que me dijiste:
    String^ str = L"Hola mundo";
    Pero como supondras tengo que hacer algo mas que representar una variable, son muchas funciones de distintos codigos fuente las que me devuelven una serie de variables de diversos tipos que tengo que representar en el textBox.

    Por lo tanto, mi problema es que el parametro Text de los controles de texto de Form1 no me permiten asignarle valores de tipo primitive. Me exige tipo System::String .
    El método ToString() me compila con variables de tipo char* por ejemplo  pero sin funcionar correctamente.
     Con la siguiente variable directamente me da error de compilación:

    int variable=5;
    String^ str = i->ToString();

    Me indica el siguiente error:
    error C2227: el operando izquierdo de '->ToString' debe señalar al tipo class/struct/union/generic

    gracias.

    Saturday, March 06, 2010 12:08 PM
  • int variable=5;
    String^ str = i->ToString();

    Me indica el siguiente error:
    error C2227: el operando izquierdo de '->ToString' debe señalar al tipo class/struct/union/generic

    gracias.




    int variable = 5;

    String ^str = variable.ToString();
    textBox1->Text = str;
    // textBox1->Text = variable.ToString();
    // textBox1->Text = Convert::ToString(variable);
    // textBox1->Text = Convert::ToString(*((double *)"hola mundo"));


    gracias, me sirvió para representar enteros, pero si mi intencion es representar el valor devuelto por una funcion:
    const char *ABhexdump(const void *data, unsigned int len)
    {
    }
    No pude representarlo de ninguna de las formas que me dijiste.
    Saturday, March 06, 2010 5:15 PM
  • Hola. System::String tiene un constructor que toma como parámetro un const
    char*. Así, todo lo que tendrías que hacer es:

    const char* sz = "Hola mundo";
    String^ str = gcnew String(sz);

    y lixto. ¿Es eso lo que requerías?

    Saludos.




    Fernando Gómez
    www.fermasmas.com
    Saturday, March 06, 2010 6:32 PM
  • Como complemento encontré este artículo que habla sobre cómo convertir
    valores nativos en CLR y viceversa. Lo dejo como referencia.

    http://www.codeproject.com/KB/mcpp/OrcasMarshalAs.aspx

    Saludos.




    Fernando Gómez
    www.fermasmas.com
    Saturday, March 06, 2010 6:36 PM
  • Gracias, muchisimas gracias, es lo que quería hacer, y ya me funciona. Como para cada tipo necesito hacer conversiones distintas , tendré que pasarle la variable ya convertida para usar una función dentro de Form1 que me represente los valores. Acceder de forma externa a un control no queda demasiado profesional.

    Por si a alguien le sirve, decir que para referenciar desde cualquier codigo fuente a un control o método dentro de la clase Form1 , es necesario hacer alguna referencia estática . Habría que hacer las siguientes modificaciones:
    namespace Form{
    public ref class Form1 : public System::Windows::Forms::Form
        {
        public:
            static Form1 ^ TheInstance;
            Form1(void)
            {
                InitializeComponent();
                 TheInstance = this;
                //
                //TODO: agregar código de constructor aquí    
               
            }
        }
    }
    y despues desde cualquier codigo fuente:
    #include "Form1.h"
    using namespace Form;
       
    Form1::TheInstance->textBox5->Text="Hola Mundo";

    Gracias a todos por vuestra ayuda .

    Saturday, March 06, 2010 8:59 PM
  • En el segundo caso, el entero es una variable valor, no referencia, por lo que

    String^ str = i.ToString();

    debería funcionarte. Pero lo mismo te devuelve "System.Int32" o algo parecido (no lo recuerdo bien). En ese caso debes hacerlo mediante el método estático

    String ^str=Convert::ToString(i);

    Lo primero es natural. El puntero es código nativo, que no es directamente compatible con código manejado. Ambas cosas están en diferentes pilas y diferentes montículos, por lo que hay que convertirlos.

    Aquí lo tienes explicado: http://www.codeguru.com/forum/showthread.php?t=372298

    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    Monday, March 08, 2010 10:11 AM
  • Hola!

    Acabo de descubrir este foro, y me estais ayudando un montón!!

    Estoy intentando programar una GUI mediante un Form de Visual C++ y no soy muy experto en el tema. El caso es que tengo el mismo problema que Davidgen, tengo que representar datos numericos (int y float) que provienen de codigos externos al Form dentro de TextBox, y al intentar mostrarlos, tengo errores. El principal y básico creo que es la libreria que se usa para utilizar String^, he buscado y creo que es <vcclr.h> pero la propia libreria causa un error.

    Si me podeis echar una mano, y confirmarme si es esa libreria la que se usa.. mil gracias!!

    Friday, April 09, 2010 10:23 AM
  • Hola!

    Acabo de descubrir este foro, y me estais ayudando un montón!!

    Estoy intentando programar una GUI mediante un Form de Visual C++ y no soy muy experto en el tema. El caso es que tengo el mismo problema que Davidgen, tengo que representar datos numericos (int y float) que provienen de codigos externos al Form dentro de TextBox, y al intentar mostrarlos, tengo errores. El principal y básico creo que es la libreria que se usa para utilizar String^, he buscado y creo que es <vcclr.h> pero la propia libreria causa un error.

    Si me podeis echar una mano, y confirmarme si es esa libreria la que se usa.. mil gracias!!


    Hola, para empezar te recomiendo que uses
    ostringstream para crear un buffer con los datos que quieras mostrar, sean del tipo que sean, y con el formato que le quieras dar para representarlos. Te da mucha flexibilidad, y te ahorras  andar convirtiendo todos tus datos a String^ ya que cada tipo requiere una conversión distinta y especifica,  mientras que con ostringstream puedes añadir las variables directamente que en tiempo de compilación se hacen las conversiones correspondientes de forma automática. La libreria que se usa es <sstream> y todo esto me lo explicó Bartomeu con ejemplos en el siguiente enlace:

    http://social.msdn.microsoft.com/Forums/es-ES/vcppes/thread/465acefe-87d8-4499-85ed-cb7f36f40747

    En cuanto a los errores que dices, pues nose si serán porque no realizas la conversión adecuada a String^, o a lo mejor no tienes definida una referencia estática sin lo cual no podrias tener acceso externo a la clase Form1. Ya nos cuentas como te va.

    Thursday, April 15, 2010 8:07 AM