Точки входа экспортированных функций DLL
Экспортированных функций DLL, следует использовать макрос AFX_MANAGE_STATE для обеспечения правильного переключения из глобального состояния модуля DLL с библиотекой DLL вызывающего приложения.
Вызывается, этот макрос задает pModuleState, указатель на структуру AFX_MODULE_STATE, содержащий глобальных данных для модуля, как эффективное состояние модуля в оставшейся части содержащей области функции. При выходе из области, макрос, предыдущий эффективное состояние модуля восстанавливается автоматически.
Этот параметр достигается путем создания экземпляра класса AFX_MODULE_STATE в стеке. В своем конструкторе, этот класс получает указатель на текущий состояние модуля в переменной-члене, а затем задает pModuleState в качестве нового эффективное состояние модуля. В деструкторе его, этот класс восстановление указатель, хранящихся в его переменные-члене как эффективное состояние модуля.
При наличии экспортированную функцию, подобный приведенному запускает диалоговое окно в библиотеке DLL, необходимо добавить следующий код в начало функции:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
Это не будет обменивать состояние модуля с состояние, возвращенное из AfxGetStaticModuleState до конца текущей области.
Проблемы с ресурсами в библиотеке DLL возникают, если макрос AFX_MANAGE_STATE не используется. По умолчанию MFC использует дескриптор ресурса основного приложения загрузить шаблон ресурса. Этот шаблон, хранится в библиотеке DLL. Первопричина, что данные состояния модуля MFC не были переключены макросом AFX_MANAGE_STATE. Дескриптор ресурса взят из состояния модуля MFC. Нельзя переключать состояние модуля, неверный дескриптор ресурса для использования.
AFX_MANAGE_STATE не для формирования в каждой функции в DLL. Например, InitInstance может быть вызван кодом MFC в приложении без AFX_MANAGE_STATE, поскольку MFC автоматически сдвигает состояние модуля перед InitInstance и затем переключателями его снова после InitInstance возвращает. То же самое верно для всех обработчиков сообщений схемы. Обычная библиотека DLL фактически находятся в отдельной master оконную процедуру, автоматически меняет состояние модуля, прежде чем направлять все сообщения.