Кто разбирается в MFC, подскажите пожалуйста, правильно ли я понимаю следующие два момента:
1. В обычной Win32 DLL разработчик включает статическую связь с MFC и использует некоторые MFC-классы (например, include "afxdlgs.h" и CFileDialog). Функция DllMain не определена. В результате в DLL будет встроена DllMain из MFC, а не обычная Win32 DllMain, так?
2. Если так, то мне тоже нужно добиться, чтобы у меня была DllMain из MFC, но у меня уже есть DllMain. (Сейчас у меня чистая Win32 DLL, а основное приложение использует MFC, я пытаюсь разобраться в одном непонятном баге с модальными диалогами, и подозрение падает как раз на MFC.) Подскажите, как мне правильно переписать имеющуюся DllMain, чтобы подключить MFC. Вот набросок::
include ? /* не знаю, какой заголовок включить */
class MyDll: public CWinApp
{
public:
/* нужен ли конструктор/деструктор? */
virtual BOOL InitInstance();
virtual BOOL ExitInstance();
} theDll;
BOOL
MyDLL::InitInstance()
{
CWinApp::InitInstance();
/* код из DllMain, DLL_PROCESS_ATTACH. hInst в theDll.m_hInstance */
return TRUE;
}
BOOL
MyDLL::ExitInstance()
{
/* код из DllMain, DLL_PROCESS_DETACH */
return CWinApp::ExitInstance();
}
Сам и отвечу — судя по всему, встраивается MFC-ный DllMain, включать нужно afxwin.h изменения примерно как я и пишу, только ExitInstance() возвращает int. Конструктор на всякий случай сделал пустой, как в примерах, зачем это нужно в C++ мне всё равно не понять.