0

として奇妙なエラーが発生していAssert Failed f:\dd\...\include\afxwin1.inlます。私はGoogleでいくつかの解決策を検索しています。いくつかの解決策はm_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);、リリースモードでこの行( )をコメントして機能させるためのものです。しかし、その行にコメントした後、さらにエラーが発生しています。

ダイアログベースの MFC アプリケーションを使用しました。のときはまったく問題なく動作していましたapplication.exe。私の要件はそれを作ることであり、私はメインになるstatic library別のものを持っています。私はそれから電話しています。線が引けたら、console applicationapplication.exeInitInstance.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.cppmainapplication .exeCDialogDlg dlg;

他の方法では、ダイアログ ベースのアプリケーションを静的ライブラリとして設定することができます。はいの場合、なぜこのエラーが発生するのですか。メイン アプリケーションを Windows とコンソール ベースでも作成してみました。私が何をしようとしているのか、よりよく理解するためにスクリーンショットを見つけてください。ここに画像の説明を入力

4

1 に答える 1

1

スタティック ライブラリにはリソースが含まれていませんが、ダイアログ コードはアイコンとダイアログ テンプレートのリソースを読み込もうとしています。リソースをコンソール アプリに移動しましたか? (それがうまくいくかどうかはわかりませんが、そうしないとうまくいきません。)

従来のサポートされている解決策は、ダイアログ コードを静的ライブラリではなく DLL に入れることです。DLL にはリソースを含めることができます。

于 2013-10-14T21:44:21.583 に答える