2012-07-02 3 views
2

У меня есть решение, и в нем есть два проекта. Когда я получил код, он сказал, что один проект обрабатывает визуальную часть, а другой - логическую часть. Теперь я добавил одну кнопку в окно. Для этого я редактировал проект, который обрабатывает визуальную часть. Я очень новичок в этом, но создание и добавление кнопок довольно просто в visual studio 2010. Теперь проблема в том, что я хочу определить, нажата ли кнопка из другого проекта. Я уверен, что проекты делятся некоторыми данными, но я не могу их захватить. На данный момент я меняю значение в файле и читаю те же данные из другого проекта, чтобы проверить, нажата ли кнопка. Но я думаю, что есть лучший способ сделать это. Может ли кто-нибудь помочь?Доступ к переменной из одного проекта в другой в visual studio C++

ответ

1

Я не думаю, что оба проекта делятся автоматически. Вам нужно будет определить интерфейс, который связывает два проекта. Например, в вашем решении выше «значение в файле» - это «интерфейс», который вы определили. Похоже, что вы пытаетесь добиться того, чтобы разделить контроллер (логическую часть) и представление (визуальную часть) отдельно, что, по-видимому, указывает на то, что ваш проект использует модель MVC.

Я бы предложил определить абстрактный класс (интерфейс), который определяет взаимодействие между двумя проектами. Все, что им нужно предоставить, - это один заголовочный файл.

Например:

// 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); 

Затем реализовать этот интерфейс:

// 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 может быть просто существующий класс, который уже обрабатывает некоторые из логики.

В решении B вы должны вызвать getMyUIHandler в некоторой функции инициализации, например контроллер класса UI, за исключением этого в качестве вашего члена. Затем «Button clicked» обработчик событий, который создает VS для вас.

// 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(); 
    ... 
} 

Затем вы можете передать любой параметр вы определяете для функции onButtonPressed как только кнопка нажата.

+0

большое спасибо за приятный ответ – user1494936

 Смежные вопросы

  • Нет связанных вопросов^_^