Показать диалог из MFC DLL
-
28-10-2019 - |
Вопрос
Я загрузил форму, но только кнопки без функций
HMODULE hModule = LoadLibrary(L"Tools.dll");
if (hModule != NULL)
{
AfxSetResourceHandle(hModule);
CDialog dgl(MAKEINTRESOURCE(199), NULL);
dgl.DoModal();
}
Так как я могу загрузить полную функцию формы, и у меня нет исходного кода DLL
Решение
Это возможно, только если вы уверены, что реализация класса диалога основана на MFC, а класс экспортируется из Tools.dll. Вы можете попробовать проверить свой .dll с Зависимость ходунка полезность.
Обратите внимание на имя конструктора Compiler Mangles. Это то, что я получил для следующего объявления.
class __declspec(dllexport) TestDialog : public CDialog
{
public:
TestDialog()
:CDialog(10)
{
}
};
Имя конструктора.
Вероятно, вы сможете воссоздать заголовок класса диалога на основе результатов вашей проверки. Вы также должны убедиться, что у вас есть одна и та же версия MFC как для инструментов, так и для вашего приложения.
Другие советы
Чтобы показать диалоговое окно из MFC dll
, как сценарий - вы выполняли экспортированную функцию в DLL, и из этой функции вы называете DoModel()
. Этот шаблон фактически хранится в модуле DLL. Вам нужно переключить состояние модуля для использования тока. Вы можете сделать это, используя:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AFX_MODULE_STATE AfxGetStaticModuleState()
->The AFX_MODULE_STATE
Структура содержит глобальные данные для модуля, то есть части состояния модуля, которое подталкивается или выскочивается.
В коде DLL будет так:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg objMyDlg;
iRet = objMyDlg.DoModal();