Я получаю некоторую странную ошибку, так как Assert Failed
f:\dd\...\include\afxwin1.inl
. Я ищу в Google некоторые решения, некоторые решения предназначены для комментирования этой строки (m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
) в режиме выпуска, чтобы заставить его работать. Но после комментирования этой строки я получаю еще несколько ошибок.
Я принял диалоговое приложение MFC. Он работает абсолютно нормально, когда это application.exe
. Мое требование состоит в том, чтобы сделать его static library
и у меня будет другое console application
которое станет основным application.exe
, я InitInstance
из этого .exe
. Как только он лишает линию,
CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CDialogDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
Он выдает ошибку выше.
В моем application.cpp
#include "stdafx.h"
#include "DialogDlg.h"
#include "Dialog.h"
#include "afxwin.h"
#include "Resource.h"
#include <afxinet.h>
CDialogApp theApp;
int _tmain(int argc, _TCHAR* argv[])
{
//CInitApp cpp;
theApp.InitInstance();
return 0;
}
Dialog.cpp
#include "stdafx.h"
#include "Dialog.h"
#include "DialogDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CDialogApp
BEGIN_MESSAGE_MAP(CDialogApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CDialogApp construction
CDialogApp::CDialogApp()
{
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
}
//CDialogApp theApp;// I have commented this code as I am declaring it in mainapplication
BOOL CDialogApp::InitInstance()
{
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
CShellManager *pShellManager = new CShellManager;
//SetRegistryKey(_T("Local AppWizard-Generated Applications"));
CDialogDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
if (pShellManager != NULL)
{
delete pShellManager;
}
return FALSE;
}
Я прокомментировал CDialogApp theApp;
line в Dialog.cpp
поскольку я Dialog.cpp
его в mainapplication.exe
. Проблема возникает, когда она достигает CDialogDlg dlg;
, Пожалуйста, помогите мне решить эту ошибку.
В другом случае можно установить диалоговое приложение как статическую библиотеку. Если да, то почему я получаю эту ошибку. Я попытался сделать основное приложение в Windows и на консоли тоже. Пожалуйста, найдите скриншот для лучшего понимания, что я пытаюсь сделать.
Статическая библиотека не содержит никаких ресурсов, но ваш код диалога пытается загрузить ресурсы шаблона значков и диалогов. Вы перемещали ресурсы в консольное приложение? (Я не знаю, будет ли это работать, но, конечно, это не сработает, если вы этого не сделаете.)
Обычным и поддерживаемым решением является поместить код диалога в DLL вместо статического lib. DLL может содержать ресурсы.