• 締切済み

ウィンドウ生成時にアクセス違反エラー

下記URLのサンプルコード http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MDI1.html を参考に、VC++2005(MFC)にてMDIアプリケーションを作成しています。 正常に動作すれば、プログラム起動時に2つのウィンドウが表示されるはずですが、 問題箇所「DEBUG!!!」にて、 「MDITest1.exe の 0x00416420 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。」 といったエラーが発生し、実行が出来ない状態です。 下記にソースコードを記載します。ベタ貼りで申し訳ありません。。 「☆☆☆追加☆☆☆」で囲まれた箇所が上記URL解説を元に自分で追加した箇所で、 それ以外はスケルトンなので、基本的にサンプルコードと同じです。 解決策ご存知の方おられましたら、お手数ですがご教授お願い致します。 【呼び出し元クラス:CMDITest1App】 BOOL CMDITest1App::InitInstance(){ INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); SetRegistryKey(_T("アプリケーション ウィザードで生成されたローカル アプリケーション")); LoadStdProfileSettings(4); // 標準の INI ファイルのオプションをロードします (MRU を含む) // アプリケーション用のドキュメント テンプレートを登録します。ドキュメント テンプレート // はドキュメント、フレーム ウィンドウとビューを結合するために機能します。 CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate(IDR_MDITest1TYPE, RUNTIME_CLASS(CMDITest1Doc), RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム RUNTIME_CLASS(CMDITest1View)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); //☆☆☆追加☆☆☆ CMultiDocTemplate* pDocTemplate2; pDocTemplate2 = new CMultiDocTemplate(IDR_MDITest1TYPE2, RUNTIME_CLASS(CMDITest1Doc), RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム RUNTIME_CLASS(CMDITest1View2)); if (!pDocTemplate2) return FALSE; AddDocTemplate(pDocTemplate2); //☆☆☆追加☆☆☆ // メイン MDI フレーム ウィンドウを作成します。 CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) { delete pMainFrame; return FALSE; } m_pMainWnd = pMainFrame; // 接尾辞が存在する場合にのみ DragAcceptFiles を呼び出します。 // MDI アプリケーションでは、この呼び出しは、m_pMainWnd を設定した直後に発生しなければなりません。 //☆☆☆追加☆☆☆ pMainFrame->OpenView(pDocTemplate2); //☆☆☆追加☆☆☆ // DDE、file open など標準のシェル コマンドのコマンド ラインを解析します。 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // コマンド ラインで指定されたディスパッチ コマンドです。アプリケーションが // /RegServer、/Register、/Unregserver または /Unregister で起動された場合、False を返します。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // メイン ウィンドウが初期化されたので、表示と更新を行います。 pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); return TRUE; } 【呼び出し先クラス:CMainFrame】※問題箇所有り void CMainFrame::OpenView(CDocTemplate *pTemplate){ CDocument* pDoc = MDIGetActive()->GetActiveDocument();   //DEBUG!!! CMDIChildWnd* pNewFrame = (CMDIChildWnd*)pTemplate->CreateNewFrame(pDoc, NULL); if( pNewFrame ) pTemplate->InitialUpdateFrame(pNewFrame, pDoc); }

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

スライダーを追加したダイアログの『Style』を『子』に変更してみましょう 『ポップアップ』のままですとエラーになると思います

zigen8513
質問者

お礼

pMainFrame->OpenView(pDocTemplate2); を最後にもってくることで解決しました! ご回答ありがとうございました。

zigen8513
質問者

補足

ご回答ありがとうございます。 Styleを「子」に変更しましたが、エラーは消えませんでした。。。

関連するQ&A