Вопрос

Я загрузил форму, но только кнопки без функций

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(); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top