m_hIcon = AfxGetApp () -> LoadIcon (IDR_MAINFRAME); Утверждение не выполнено: at afxwin1.inl

0

Я получаю некоторую странную ошибку, так как 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 и на консоли тоже. Пожалуйста, найдите скриншот для лучшего понимания, что я пытаюсь сделать. Изображение 174551

Теги:
static-libraries
visual-c++
mfc
visual-studio-2010

1 ответ

0

Статическая библиотека не содержит никаких ресурсов, но ваш код диалога пытается загрузить ресурсы шаблона значков и диалогов. Вы перемещали ресурсы в консольное приложение? (Я не знаю, будет ли это работать, но, конечно, это не сработает, если вы этого не сделаете.)

Обычным и поддерживаемым решением является поместить код диалога в DLL вместо статического lib. DLL может содержать ресурсы.

  • 0
    Я не перемещал ресурсы в консольное приложение. Но все же я предоставляю или включаю заголовочный файл ресурса, когда это требуется
  • 0
    Заголовочный файл ресурса содержит только идентификационные номера. Он не содержит никаких ресурсов, таких как значки и т. Д. Файлы Lib не поддерживают ресурсы. Только exe-файлы и DLL-файлы поддерживают ресурсы.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню