none
¿Es posible usar código C++ puro en un proyecto de Windows Forms? RRS feed

  • Pregunta

  • Con C++ puro me refiero a "Aplicación consola con win32", pues esa es la opción que uso en VS 2010 para crear algún programa simple.

    Antes sólo me refería a él diciendo C++ de consola, pero, he visto que también existen aplicaciones de consola con C++ y que no es específicamente el C++ que conozco sino un llamado C++ CLR.

    Recientemente comencé a aprender un poco sobre Windows Forms y me gustaría saber si puedo aplicar mis conocimientos previos de C++ puro en él.

    Por ejemplo, he creado un formulario que por defecto ha aparecido como Form1, luego he creado una clase (la puse como inline) y dentro de ella he puesto lo siguiente:

    #pragma once
    #include <fstream>
    #include <string>
    ref class loadLog
    {
    public:
    	bool Existe()
    	{
    		ifstream Flujo ("log.jr");
    		if(Flujo.is_open()) 
    			{
    				getline(Flujo, user);
    				getline(Flujo, pass);
    				getline(Flujo, pathExam);
    				Flujo.close();
    				return true;
    			}
    		else false;
    	}
    	bool Login_Correcto(string username, string password)
    	{
    		if(user==username && pass==password)
    			return true;
    		else false;		
    	}
    	void loadExam()
    	{
    
    	}
    private:
    	string user, pass, pathExam;
    };

    Es decir, he incluido las librerías que anteriormente usaba... 

    En realidad algunas funciones e instruccions que allí aparecen me hubiera gustado escribirlas directamente sobre Form1.h pero no sé dónde debería ir ello.

    Entonces en Form1.h he escrito lo siguiente:

    			// Verificar existencia de log.jr !
    			loadLog^ Cuenta;
    			if(Cuenta.Existe())
    				panelExam->Visible = true;
    			else panelLogin->Visible = true;

    dentro de la parte que se indica:

    void InitializeComponent(void){/* aquí */}

    Pero el programa al intentar visualizarlo dice que no es posible porque tiene errores. Si intento ejecutar es lo mismo.

    Lo que quiero es ver si existe un archivo log.jr que en realidad sería un archivo de texto plano como cualquier *.txt sólo que escribí *.jr para simular la idea de que mi programa usará una extensión propia. Si existe, debería leer las líneas en ese orden y almacenarlas en los string que he creado.

    Me parece que existe una clase String para Windows Forms, pero como no conozco mucho sobre ella creí que podría seguir usando la clase <string>, total que está en un archivo separado a Form1.h

    Gracias de antemano.

    martes, 26 de marzo de 2013 16:50

Todas las respuestas

  • Luego de haber quitado "ref" he podido escribir el código con menor dificultad.

    De todos modos, cuando quiero acceder al texto de un TextBox he querido tomar el valor TextBox->Text y almacenarlo en un objeto string.

    Pero por lo visto, el paso de String^ a string no es directo, ¿verdad?. Encontré algunos temas donde exponían funciones para hacer ese traslado.


    De seguro que mezclar los códigos  no es muy recomendado. Pero, en caso de que quisiera aprender más sobre las funciones propias del Windows Forms, no hay mucha información, ¿verdad?


    Por ejemplo he escrito en Google "FileStream" y me ha mandado a una página donde supuestamente se muestran algunos códigos de ejemplo, pero en la pestaña de "C++" no hay contenido. Incluso en la parte que decía versión seleccione .NET Framework 4.5 (porque creo que este es el que corresponde al VS 2010) y ni aún así mostraba ejemplos:

    http://msdn.microsoft.com/es-es/library/6ka1wd3w(v=vs.110).aspx

    Muchas gracias por responder, en serio.

    • Editado JCarlos Ramos miércoles, 27 de marzo de 2013 21:11 Letras aparecían muy pequeñas.
    miércoles, 27 de marzo de 2013 21:10
  • Justamente es el que acabo de copiar en mi programa y va muy bien (me había encontrado con varias funciones distintas, qué bueno que elegí esa).

    Aunque funcione bien, me gustaría saber si estoy haciendo lo correcto:

    - Cuando quiero evaluar una expresión en cuanto se inicie el programa, sin que el usuario haga click alguno, ¿el código va en Form1_Load?

    	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    				 	// Verificar existencia de log.jr !
    					loadLog Cuenta;
    					if(Cuenta.Existe())
    					{
    						panelExam->Visible = true;
    						btnStart->Visible = true;
    					}
    					else panelLogin->Visible = true;
    			 }

    - Si deseo añadir funciones que no necesariamente se activan con eventos (como Marshal), ¿estas deben ir justo antes de las funciones que se activan por eventos pero después de #pragma?

    #pragma endregion
    
    		void MarshalString ( String ^ s, string& os ) 
    		{
    			using namespace Runtime::InteropServices;
    			const char* chars = 
    				(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
    			os = chars;
    			Marshal::FreeHGlobal(IntPtr((void*)chars));
    		}
    	private: System::Void btnStart_Click(System::Object^  sender, System::EventArgs^  e) {
    				 MessageBox::Show("Buena suerte !");
    			 }

    Gracias nuevamente. 

    miércoles, 27 de marzo de 2013 22:19
  • Muchas gracias nuevamente.

    Recién he notado la existencia de un foro específico para "Windows Forms", creo que debí haber creado el tema allí jeje.

    Quizás usted pueda ayudarme con este otro ligero problema que tengo al hacer el diseño de un programa: 

    http://social.msdn.microsoft.com/Forums/es-es/winformses/thread/de116b41-556d-412f-9755-fcbb13771303

    viernes, 29 de marzo de 2013 1:19