Hola, estoy intentando hacer una aplicacion con VisualC++, y me tira un error en este trozo de codigo...private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
FILE *Archivo;
char Nombre[10];
int celda;
strcpy(Nombre, AbrirArchivo->Text);
//AbrirArchivo es un Textbox
Archivo = fopen(AbrirArchivo->Text, "wb");
if (Archivo != NULL)
{
Estado->Text = "Error: No se encuentra el archivo";
//Estado es otro Textbox
}
else
{
fclose(Archivo);
}
}
};
Los errores que me dan son estos:Citarerror C2664: 'strcpy' : no se puede convertir el parámetro 2 de 'System::String ^' a 'const char *'
Citarerror 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
¿Quizás así?:
private:
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
FILE *Archivo;
char Nombre[10];
int celda;
strcpy(Nombre, (char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer());
//AbrirArchivo es un Textbox
Archivo = fopen((char*)Marshal::StringToHGlobalAnsi(AbrirArchivo->Text).ToPointer(), "wb");//Esto lo veo poco lógico pues ya podrías hacer:
//Archivo = fopen(Nombre, "wb");
if (Archivo != NULL)
{
Estado->Text = "Error: No se encuentra el archivo";
//Estado es otro Textbox
}
else
{
fclose(Archivo);
}
}
};
Fuente: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtohglobalansi.aspx
Cita de: avesudra en 31 Marzo 2013, 16:52 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
Pues no sé, igual es porque no tiene esto:
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í:
using namespace System;
using namespace System::Runtime::InteropServices;
#include <iostream> // for printf
int main()
{
// Create a managed string.
String^ managedString = "Hello unmanaged world (from the managed world).";
// Marshal the managed string to unmanaged memory.
char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(managedString ).ToPointer();
printf("stringPointer = %s\n", stringPointer);
// Always free the unmanaged string.
Marshal::FreeHGlobal(IntPtr(stringPointer));
return 0;
}