У меня есть приложение MFC «Анализатор», которое использует Dll с ресурсами.
Существует функция для получения экземпляра Dialog, содержащегося в dll, называемая GetCriteriaDlg.
Мой файл DLL:
extern "C" {__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void );}
in the dll cpp file I have
extern "C"{
__declspec(dllexport) CCriteriaDlg* GetCriteriaDlg(void )
{
return &dlg;
}
}
Мой AnalyserDoc.cpp, где я использую функцию:
extern "C" {__declspec(dllimport) CCriteriaDlg* GetCriteriaDlg(void );}
в dll также есть класс
class AFX_EXT_CLASS CCriteriaDlg : public CDialog
И они являются точной копией экспортированного файла заголовка класса, включенного в AnalyserDoc.cpp под именем DllImports.h
AnalyserDoc.cpp имеет функцию, которая сопоставлена с пунктом меню
Void CAnalyserDoc::OnAnalyseRun()
{
// TODO: Add your command handler code here
CCriteriaDlg *dlg=GetCriteriaDlg();
dlg->DoModal();
}
Теперь вот где это становится странным. Если у меня все как есть, программа запускается, но обычное окно SD MFC никогда не появляется, и мне приходится завершать процесс из диспетчера задач.
Но если бы я должен был закомментировать содержание OnAnalyseRun()
затем окно загружается нормально (но, очевидно, тогда они не действуют при вызове метода, я попытался поменяться местами, и если я объявляю * dlg только без вызова метода, окно загружается нормально, поэтому я думаю, что оно определенно имеет отношение к GetCriteriaDlg()
,
Почему это происходит?
Задача ещё не решена.
Других решений пока нет …