Accediendo a la variable de un proyecto a otro en Visual Studio C ++

Tengo una solución y tiene dos proyectos. Cuando obtuve el código, me dijeron que un proyecto maneja la parte visual y el otro tiene la parte lógica. Ahora agregué un botón a la ventana. Para hacer eso, edité el proyecto que maneja la parte visual. Soy muy nuevo en esto, pero crear y agregar botones es bastante sencillo en Visual Studio 2010. Ahora el problema es que quiero detectar si el botón se presionó desde el otro proyecto. Estoy seguro de que los proyectos comparten algunos datos, pero no puedo capturarlos. Por ahora estoy cambiando un valor en un archivo y leyendo los mismos datos del otro proyecto para verificar si el botón está presionado. Pero creo que hay una mejor manera de hacerlo. ¿Alguien puede ayudar?

preguntado el 02 de julio de 12 a las 01:07

1 Respuestas

No creo que los dos proyectos se compartan automáticamente. Tendrás que definir la interfaz que comunican los dos proyectos. Por ejemplo, en su solución anterior, "un valor en un archivo" es la "interfaz" que ha definido. Lo que parece que está tratando de lograr es separar el controlador (parte lógica) y la vista (parte visual) por separado, lo que parece indicar que su proyecto está utilizando el modelo MVC.

Sugeriría definir una clase abstracta (interfaz) que defina la interacción que desea entre los dos proyectos. Todo lo que tienen que compartir es un solo archivo de encabezado.

Por ejemplo:

// Solution A (Controller - logic part)
// MyUIHandler.h
class IMyUIHandler //You can also use microsoft's interface keyword for something similar.
{
public:
    HRESULT onButtonPressed() = 0; // Note that you can also add parameters to onButtonPressed.
};

HRESULT getMyUIHandler(IMyUIHandler **ppHandler);

Luego implemente esta interfaz:

// Solustion A (Controller - logic part)
// MyUIHandler.cpp
#include "MyUIHandler.h"
class CMyUIHandler : public IMyUIHandler
{
private:
   // Add your private parameter here for anything you need
public:
    HRESULT onButtonPressed();
}

HRESULT getMyUIHandler(IMyUIHandler **ppHandler)
{
    // There are many ways to handle it here:
    // 1. Define a singleton object CMyUIHandler in your project A. Just return a pointer 
    //    to that object here. This way the client never releases the memory for this 
    //    object.
    // 2. Create an instance of this object and have the client release it. The client 
    //    would be responsible for releasing the memory when it's done with the object. 
    // 3. Create an instance of this object and have a class/method in Solution A release
    //    the memory. 
    // 4. Reference count the object, for example, make IUnknown the parent class of 
    //    IMyUIHandler, and implement the IUnknown interace (which is boiler plate code).
    // Since I don't know your project it's hard for me to pick the most suitable one. 
    ...
    *ppHandler = myNewHandler;
    ...
    return S_OK;
}

CMyUIHandler puede ser simplemente su clase existente que ya maneja parte de la lógica.

En la solución B, debe llamar a getMyUIHandler en alguna función de inicialización, por ejemplo, el controlador de la clase UI, guárdelo como su miembro. Luego, el controlador de eventos "Botón hizo clic" que VS crea para usted.

// Solution B (View - visual part)
// MyUIView.h
class MyUIView
{
protected:
    IMyUIHandler *m_pHandler;
}

// MyUIView.cpp
CMyUIView::CMyUIView(...) 
{
    ...
    hr = getMyUIHandler(&m_pHandler);
    // error handler, etc...   
    ...
}

// In the function that is created for you when button is clicked (I'm not sure if I get the signature right below.
void OnClick(EventArgs^ e) 
{
    ...
    hr = m_pHandler->onButtonPressed();
    ...
}

Luego puede pasar cualquier parámetro que defina para la función onButtonPressed tan pronto como se haga clic en el botón.

Respondido 02 Jul 12, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.