シリアライズについて – プログラミング – Home

通知
すべてクリア

[解決済] シリアライズについて


NOMURA
 NOMURA
(@NOMURA)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

MFC SDI です、ファイルを開いて、エディットビューに表示し、かつ、
一行ずつコンテナに読込みたいのですが、デバッグモードで実行すると、Debug
Assertion Failed! が起こります
ネットで検索しますと、エディットビューのデータを取得したい場合、
ビューのドキュメントを取得する方法は多く見られるのですが、シリアライズする時点で
データをコンテナに取得しかつ、エディットビューに表示するような例は
見当たりませんでした、このような使い方はイレギュラーなのでしょうか?
また、どのようにすれば目的が果たせるでしょうか。よろしくお願いします。

// CxxxDoc シリアル化

void CxxxDoc::Serialize(CArchive& ar)
{
CString line;
if( ar.IsLoading() == TRUE)
{
while(ar.ReadString(line))
{
// メンバ変数 std::vector<CString> mc_vec
mc_vec.push_back(line);
}
}
if(ar.IsBufferEmpty())
reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);
}


引用未解決
トピックタグ
初心者だけど
 初心者だけど
(@初心者だけど)
ゲスト
結合: 15年前
投稿: 1
 

void CxxxDoc::Serialize(CArchive& ar)
{

arからまずデータをよみます それをView側の変数に転送する
それから たとえば pViewにView側のポインタをゲットして
pView->Invalidate();すると
OnDraw(~){~~~}が起動されるから
そのなかでViewにお好きなように展開なさるのも一法

}


返信引用
NOMURA
 NOMURA
(@NOMURA)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

初心者だけど さん、ご回答ありがとう。
>arからまずデータをよみます それをView側の変数に転送する
これはできたのですが

>pViewにView側のポインタをゲットして
これは、CxxxViewクラスのポインタを、CxxxDocクラスでゲットするということだと思う
のですが、
すみません、具体的な例を教えていただきませんか。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

m_viewList はドキュメントに関連付けられたビューのリスト?
だとしたら、わざわざ自分で管理しなくて良いです。

以下のMFC関数で管理できます。
CDocument::GetFirstViewPosition()
CDocument::GetNextView()

例えば、SerializeRaw()関数呼ぶだけなら、以下の通りで良いです。
void CxxxDoc::Serialize(CArchive& ar)
{
POSITION Pos = GetFirstViewPosition();
while(Pos)
{
CEditView* lpView = (CEditView*)GetNextView(Pos);
lpView->SerializeRaw(ar);
}
}

それでは、本題です。

> 一行ずつコンテナに読込みたいのですが、デバッグモードで実行すると、Debug
> Assertion Failed! が起こります
どういうAssertionですか?
Assertionのときは、[再試行]するとファイル名,行番号およびAssertionの原因が
分かります。

たぶん、「ファイルの末尾に達した」とか、そういうのですよね?
そうだとするなら、以下のコードのせいで、
> while(ar.ReadString(line))
で、すでにファイルポインタがファイル末尾に行っちゃってるんです。

ファイルポインタを戻してください。
ar.GetFile()->SeekToBegin();


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>これは、CxxxViewクラスのポインタを、CxxxDocクラスでゲットするということだと
>思うのですが、
CView::GetDocument();

MSDNサンプル Scribbleをダウンロードするといいと思います。
 HTTPに頼るのもいいですが、ドキュメント/ ビュー
今回スレにはでていませんがフレームの関係についてはMSDNでも説明があります。
いつものことですが、説明は分かり難いですが内容は確かなものだと思いますので
MSDNをよく読むことを薦めます。

遠いようで一番の近道は書籍を購入することですね。

 


返信引用
NOMURA
 NOMURA
(@NOMURA)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

bun さんありがとう
ご指摘通り、ファイルポインタを戻したら期待通りの動作となりました。
ITOさん、scribbleの紹介ありがとう、MDIの良い題材ですね大変勉強になります
気づいたのですが、データ処理はDocクラスで行い、描画やプリントの処理はViewクラスで
行っているように思うのですが、特殊な場合もあるのでしょうが、基本のスタイルは
このパターンでいいのでしょうか?
それから、書籍の件ですがMFCの良書も紹介して頂けないでしょうか、Amazonで検索しますと
近年はMFCの本というのは出版されていないようですが、古い本でも結構ですので良い本
をご存知でしたら紹介願います、洋書はちょっと難有り(私の読解能力)ですが、合わせ
てお願いします。
それから、MSDNは読んでも理解できない場合が多いので敬遠がちですが、調べる努力をし
ていきます。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> 気づいたのですが、データ処理はDocクラスで行い、描画やプリントの処理はViewク
> ラスで行っているように思うのですが、特殊な場合もあるのでしょうが、
> 基本のスタイルはこのパターンでいいのでしょうか?
僕は、ドキュメントはあまり使わないので、詳細は省きますが、
基本はいいと思います。

> それから、書籍の件ですがMFCの良書も紹介して頂けないでしょうか、Amazonで
> 検索しますと近年はMFCの本というのは出版されていないようですが、
> 古い本でも結構ですので良い本をご存知でしたら紹介願います、
> 洋書はちょっと難有り(私の読解能力)ですが、合わせてお願いします。
うーん、僕も本探しはへたですね。
東京はとおいですか?
「今のところ立ち読み出来る本屋さんで大きいのは、「八重洲ブックセンター」
でしょうかな?」と思います。
あと、秋葉原にも何件かありましたが、かなり模様替えしたので詳細は分かりません
ね。
初めてのときは、やはり書店で読んで選ぶのがいいと思います。
時間が掛かりますが順当の手段だと思います。


返信引用
NOMURA
 NOMURA
(@NOMURA)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

ITOさんありがとうございました。
MFC本は、東京へ出張した際に探して見たいと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました