Я пишу DLL (MS VS13, C++), что называется внешней программой и которая использует стандартизированный список параметров:MFC Dialog в не-MFC приложение
extern "C" __declspec(dllimport) int TYPE850(double &time, double xin[], double xout[], double &t, double &dtdt, double par[], int info[], int icntrl);
Результаты подпрограммы написаны в массив xout [], чтобы вызывающая программа могла читать и обрабатывать результаты DLL.
Теперь я хочу добавить диалог в DLL, который может принимать пользовательский ввод каждый раз, когда вызывается DLL. Идея заключается в использовании MFC. Оказалось, что не просто добавить код MFC в существующий DLL-код, поэтому я пытаюсь сделать это наоборот: я создаю регулярную библиотеку MFC DLL и ресурс диалога и добавляю исходный DLL-код. Код будет выглядеть следующим образом (без включаемых заявлений):
BEGIN_MESSAGE_MAP(CType850LibApp, CWinApp)
END_MESSAGE_MAP()
CType850LibApp::CType850LibApp()
{
}
CType850LibApp theApp;
BOOL CType850LibApp::InitInstance()
{
CWinApp::InitInstance();
CSelDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
return FALSE;
}
extern "C" __declspec(dllexport)int TYPE850(double &time,double xin[], double xout[], double &t, double &dtdt,double par[],int info[], int icntrl)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//DLL code ...
return 1;
}
Я добавил экземпляр диалога для CType850LibApp :: InitInstance() только для тестирования. Код может быть скомпилирован, и при запуске основного приложения диалог появляется при вызове DLL. Но очевидная проблема заключается в том, что функция C никогда не вызывается. Идея заключалась в вызове функции C внутри CType850LibApp :: InitInstance(), но это не работает, потому что список параметров функции неизвестен.
Итак, вопросы: 1) Как я могу вызвать функцию C с правильным списком параметров, чтобы вся информация, содержащаяся в списке параметров, была правильно перенесена в DLL-код, и результаты могут быть правильно записаны в xout [] массив? 2) Как только я могу вызвать функцию C, как я могу создать диалоговое окно в DLL?
Благодарим за помощь!
Получите модальное диалоговое окно из 'InitInstance', поместите его в' TYPE850 (...) ' –
Не помогает, потому что Type850() никогда не вызывается. – MrModest
Также убедитесь, что 'InitInstance' возвращает' TRUE'. Это простой вызов функции. Измените свой вопрос, чтобы показать свою вторую попытку и показать соответствующее сообщение об ошибке. –