Встраивание ресурсов в DLL для повторного использования, MFC / VC ++ - PullRequest
3 голосов
/ 10 февраля 2009

Например, я хочу создать DLL, экспортирующую функцию ShowDialog, которая отображает диалоговое окно и изменяет текст в одной из кнопок диалога. Диалог и все другие ресурсы должны быть связаны в DLL.

Я провел быструю проверку, и когда DLL пытается GetDlgItem () с определенным идентификатором элемента управления, она возвращает нулевой указатель. Я предполагаю, что в этом случае требуется больше шагов для правильной обработки ресурсов.

Ответы [ 2 ]

4 голосов
/ 10 февраля 2009

Вы делаете что-то вроде следующего в точках входа в вашу DLL?

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Отметьте здесь technote о состоянии модуля MFC . Существуют различные типы состояния модуля MFC, с которым вы чаще всего взаимодействуете.

Это меняет текущее состояние модуля с государством вернулся из AfxGetStaticModuleState до конца текущей области.

Проблемы с ресурсами в DLL будут происходит, если макрос AFX_MODULE_STATE не используется. По умолчанию MFC использует дескриптор ресурса основного приложение для загрузки ресурса шаблон. Этот шаблон на самом деле хранится в DLL. Коренная причина информация о состоянии модуля MFC не был переключен AFX_MODULE_STATE макрос. Ресурс дескриптор восстановлен из модуля MFC государство. Не переключение состояния модуля вызывает неправильный дескриптор ресурса б.

3 голосов
/ 10 февраля 2009

С MSDN :

По умолчанию MFC использует ресурс дескриптор основного приложения для загрузки шаблон ресурса. Если у вас есть экспортированная функция в DLL, такая как тот, который запускает диалоговое окно в DLL, этот шаблон на самом деле хранится в модуле DLL. Вам нужно переключиться состояние модуля для правильного ручка для использования. Вы можете сделать это добавив следующий код в начало функции:

AFX_MANAGE_STATE(AfxGetStaticModuleState());
...