我收到一些奇怪的错误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;
中评论了Dialog.cpp
行,因为我在mainapplication .exe
中调用它。问题发生在CDialogDlg dlg;
时。
请帮我解决这个错误。
另一方面,可以将基于对话框的应用程序设置为静态库。如果是,那么为什么我会收到此错误。我也试过在Windows和控制台上制作主应用程序。请查看屏幕截图以获得更好的信息,我想做什么。
答案 0 :(得分:0)
静态库不包含任何资源,但您的对话框代码会尝试加载图标和对话框模板资源。您是否将资源移动到控制台应用程序中? (我不知道这是否有效,但如果你不这样做,它肯定不会起作用。)
传统的和支持的解决方案是将对话框代码放入DLL而不是静态库。 DLL可以包含资源。