Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MeCraniDOS en 31 Marzo 2013, 16:08 pm



Título: [C] Error Conversión String to Char
Publicado por: MeCraniDOS en 31 Marzo 2013, 16:08 pm
Hola, estoy intentando hacer una aplicacion con VisualC++, y me tira un error en este trozo de codigo...

Código
  1. private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
  2.  
  3. FILE *Archivo;
  4. char Nombre[10];
  5. int celda;
  6.  
  7.  
  8. strcpy(Nombre, AbrirArchivo->Text);
  9.                //AbrirArchivo es un Textbox
  10.  
  11. Archivo = fopen(AbrirArchivo->Text, "wb");
  12. if (Archivo != NULL)
  13. {
  14. Estado->Text = "Error: No se encuentra el archivo";
  15.                        //Estado es otro Textbox
  16. }
  17. else
  18. {
  19. fclose(Archivo);
  20. }
  21.  
  22.  
  23. }
  24. };
  25.  

Los errores que me dan son estos:

Citar
error C2664: 'strcpy' : no se puede convertir el parámetro 2 de 'System::String ^' a 'const char *'

Citar
error C2664: 'fopen' : no se puede convertir el parámetro 1 de 'System::String ^' a 'const char *'

No se como hacer la conversión, así que a ver si alguien me puede echar una mano...  :silbar:

Saludos


Título: Re: [C] Error Conversión String to Char
Publicado por: avesudra en 31 Marzo 2013, 16:52 pm
¿Quizás así?:
Código
  1. private:
  2. System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
  3. {
  4.  
  5.    FILE *Archivo;
  6.    char Nombre[10];
  7.    int celda;
  8.  
  9.  
  10.    strcpy(Nombre, (char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer());
  11.    //AbrirArchivo es un Textbox
  12.  
  13.    Archivo = fopen((char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer(), "wb");//Esto lo veo poco lógico pues ya podrías hacer:
  14.    //Archivo = fopen(Nombre, "wb");
  15.    if (Archivo != NULL)
  16.    {
  17.        Estado->Text = "Error: No se encuentra el archivo";
  18.        //Estado es otro Textbox
  19.    }
  20.    else
  21.    {
  22.        fclose(Archivo);
  23.    }
  24. }
  25. };
Fuente: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi.aspx


Título: Re: [C] Error Conversión String to Char
Publicado por: MeCraniDOS en 31 Marzo 2013, 17:46 pm
¿Quizás así?:

Ahora me sale esto...

Citar

error C2653: 'Marshal' : no es un nombre de clase o espacio de nombres

error C2228: el operando izquierdo de '.ToPointer' debe tener class/struct/union

1>        el tipo es ''unknown-type''

error C3861: 'StringToHGlobalAnsi': no se encontró el identificador

error C2653: 'Marshal' : no es un nombre de clase o espacio de nombres

error C2228: el operando izquierdo de '.ToPointer' debe tener class/struct/union

1>        el tipo es ''unknown-type''

error C3861: 'StringToHGlobalAnsi': no se encontró el identificador



Título: Re: [C] Error Conversión String to Char
Publicado por: avesudra en 31 Marzo 2013, 18:31 pm
Pues no sé, igual es porque no tiene esto:
Código
  1. using namespace System::Runtime::InteropServices;
Pero vamos que ya te digo que ni idea porque en el link que te he pasado lo hacen así:
Código
  1. using namespace System;
  2. using namespace System::Runtime::InteropServices;
  3.  
  4. #include <iostream>                                                 // for printf
  5.  
  6.  
  7. int main()
  8. {
  9.    // Create a managed string.
  10.    String^ managedString = "Hello unmanaged world (from the managed world).";
  11.  
  12.    // Marshal the managed string to unmanaged memory.
  13.    char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();
  14.  
  15.    printf("stringPointer = %s\n", stringPointer);
  16.  
  17.    // Always free the unmanaged string.
  18.    Marshal::FreeHGlobal(IntPtr(stringPointer));
  19.  
  20.    return 0;
  21. }