Конфликт ресурсов ON_UPDATE_COMMAND_UI - PullRequest
0 голосов
/ 07 октября 2010

У меня есть класс EXE, который содержит ресурс кнопки с идентификатором EXE_BUTTON_RESOURCE

ON_UPDATE_COMMAND_UI(EXE_BUTTON_RESOURCE, OnUpdateExeButtonResource)

void EXE::OnUpdateExeButtonResource(CCmdUI* pCmdUI)
{
        pCmdUI->Enable(exe_flag);

}

Это приложение EXE загрузит другой класс DLL.

Класс DLL имеет ресурс элемента меню с идентификатором DLL_MENU_RESOURCE.

К сожалению, EXE_BUTTON_RESOURCE и DLL_MENU_RESOURCE имеют одинаковый идентификатор ресурса. Избежать их иметь ID конфликта довольно сложно, так как это два отдельных проекта.

Всякий раз, когда exe_flag, являющийся членом EXE, становится ложным, это также влияет на меню в DLL. Нажатие на DLL_MENU_RESOURCE меню не будет иметь никакого эффекта.

Как мне избежать этой ловушки? Ручная проверка их ресурсов resource.h для меня не вариант, так как это два отдельных проекта, управляемых двумя отдельными командами.

Однажды я подумал, что это может быть проблема с конфликтом ресурсов. Следовательно, в коде DLL, который показывает меню, вызываемое правой кнопкой мыши, у меня есть следующий код, загружающий ресурс DLL и восстанавливающий обратно ресурс EXE, когда закончите.

void DLL::OnContextMenu(CWnd* pWnd, CPoint point) 
{
    RestoreDLLState ext;
        ...
}

RestoreDLLState загрузит глобальный ресурс DLL и снова загрузит его исходный ресурс.

RestoreDLLState::RestoreDLLState()
{
    m_hInstOld = AfxGetResourceHandle();
    AfxSetResourceHandle(g_hDLLResource);
}

RestoreDLLState::~RestoreDLLState()
{
    AfxSetResourceHandle(m_hInstOld);
}

Это не работает. Я предполагаю, что действие по включению / отключению ресурса с определенным идентификатором будет распространяться от EXE до DLL независимо от того, какой ресурс по умолчанию загружается в данный момент.

Если честно, я отправил похожий вопрос в Code Project и microsoft.public.vc.mfc , но не получил много полезных комментариев оттуда.

1 Ответ

1 голос
/ 07 октября 2010

Проверьте это для классного инструмента:
http://www.codeproject.com/KB/macros/resorg.aspx-

Еще один полезный пост:
MFC resource.h идентификаторы команд / сообщений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...