環境はVisualStudio2005、MDIプロジェクトと拡張DLLプロジェクトを1つのソリューションに作成しています。
MDIアプリを作成していますが InitInstance() 関数内の
CMultiDocTemplateの引数 RUNTIME_CLASS() 実行時にAssert Failed!が出ます。
CMultiDocTemplate に登録するビュークラスはオリジナルの拡張DLL内でCFormViewクラスから派生させたクラスです。
特に変わったことをしている訳ではなく、ほとんどウィザードがソースを吐いた状態のままです。
"COriginalView" をデフォルトの "CMyView" にするとエラーは出ません。
また、"COriginalView" もコントロールを1ヶ置いてビューフォームとクラスを作成し、
AFX_EXT_CLASS でエクスポートして参照できています。
また、MDI側でフォームとクラスを作成しそれを使用した場合はエラーは出ません。
ドキュメント/ビューアーキテクチャの理解が足りない為起きている問題だと思います。
宜しくお願い致します。
--- 詳細 ------------------------------------------------
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDllView)); ←これ実行時に Assert が出る
AddDocTemplate(pDocTemplate);
---------------------------------------------------------
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
"COriginalView" が何なのか判りませんが、要はDLL側にあるビューで CMultiDocTemplate が成功しないと言う事でしょうか。
VisualStudio2005 が手元に無いのですが、MDI側のどこかに CRuntimeClass* p = RUNTIME_CLASS(CDllView);
を書いても失敗するのでしょう。
どうすれば解決するか判りませんが、MDI側で CDllView の派生クラスは作成できませんか?
この回答への補足
コメント頂きありがとうございます。
COriginalViewはDLL側で作成したビュークラスです。
(テンプレートとなるダイアログを作成しウィザードを使用してクラスを作成しました)。
CRuntimeClass* p = RUNTIME_CLASS(COriginalView); は実行できました(エラー無し)。
また、MDI側でCOriginalViewの派生を作成しそれを用いても状況は変わらずです。。。
ちなみにドキュメントクラスですが、MDI側で作成したクラス(もちろん動作可能)をDLL側へ移したものを使用しています。
No.1
- 回答日時:
MFC はもう何年も使ってないので、マトモな回答はできませんが…
どのファイルのどこの行で ASSERT しているかがメッセージとして表示されると思うので、これを追いかければ原因が分かると思います。
Visual C++ には MFC のソースが付いてきますし、CMultiDocTemplate のコンストラクタが呼ばれる箇所から F11 でじっくりステップ実行していっても、ASSERT 位置にたどり着けます。
CMultiDocTemplate クラスのコンストラクタのソース(VS2005 添付のソース)をみる限りは、
ASSERT(m_docList.IsEmpty());
となっているため、InitInstance() でドキュメントを作る時点ではドキュメントは空でないといけない、ということだと思います。
もしかしたら、CMultiDocTemplate の親クラスのコンストラクタ内で ASSERT しているのかもしれませんが、どちらにしろ、ASSERT している原因が分からなければ対応は出来ないと思いますよ。
この回答への補足
ASSERTは「doctempl.cpp」の以下の場所で出ます。
CDocTemplateのコンストラクタです。
初心者なもので何がマズくてここでASSERTが出るのか分かりません。
-----------------
CDocTemplate::CDocTemplate(UINT nIDResource, CRuntimeClass* pDocClass,
CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass)
{
ASSERT_VALID_IDR(nIDResource);
ASSERT(pDocClass == NULL ||
pDocClass->IsDerivedFrom(RUNTIME_CLASS(CDocument))); ←※ここで出る
ASSERT(pFrameClass == NULL ||
pFrameClass->IsDerivedFrom(RUNTIME_CLASS(CFrameWnd)));
ASSERT(pViewClass == NULL ||
pViewClass->IsDerivedFrom(RUNTIME_CLASS(CView)));
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログクラスのコントロー...
-
ウィンドウの背景に画像を配置する
-
既定のコンストラクタがない?
-
【C++】vectorについて
-
VC++ リストボックスにデータを...
-
MFCアプリのコマンドラインでパ...
-
VB.NETでのEnumの使用について
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
C++ protectedにアクセス不可
-
派生クラスから基本クラスprote...
-
C#で、動的にサブクラスを取得...
-
System.Net.HttpWebRequest、も...
-
Visual C++ 6.0 でクラス表示が...
-
クラスのアドレスを引数として...
-
vba sendKeysを送る相手のソフ...
-
MFCのドラッグ&ドロップについて
-
Delphi6でVB.NETで作成のDLL呼出
-
C++では構造体がメンバ関数をも...
-
継承を重ねた場合のコストはど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
MFCアプリのコマンドラインでパ...
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
【ASP.NET】 独自で作成したク...
-
派生クラスから基本クラスprote...
-
ダイアログクラスのコントロー...
-
C#で通常のbuttonコントロール...
おすすめ情報