- PR -

VC:SDI:アプリケーションエラー

1
投稿者投稿内容
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2004-02-12 13:26
いつも参考にさせていただいています。

現在VC.NETでアプリケーションを開発しているのですが、不明なエラーの原因がわからず投稿しました。

開発しているアプリケーションは、SDIでCFormViewベースで作ってあり、比較的大量のデータファイルを読み込み多くの描画処理や計算を行うもので、コンパイルは正常にとおり一通り実行はできるもののある程度操作しているとアプリケーションエラーが起きて落ちてしまいます。
前兆としては落ちる前に必ずメニューバーからプルダウンで表示されるメニュー項目の一部が(全てではなく)グレー表示されています。メニュー項目をグレー表示するような命令はどこにもないのですが、これは何を意味するものなのでしょうか?
そしてメニュー項目がグレー表示になったところで、FormViewのViewを切り替えようとするとおちます。切り替え部分のソースは次のような感じです。

     CView* pOldActiveView = GetActiveView();
::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, tmpType);

CRuntimeClass* pNewViewClass;
switch (tmpType)
{
case MENU_TYPE1:
pNewViewClass = RUNTIME_CLASS(CAllIdeogram1);
break;
case MENU_TYPE2:
pNewViewClass = RUNTIME_CLASS(CAllIdeogram2);
break;
default:
ASSERT(0);
return;
}
         ・
         ・
         ・

ここの、「::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, tmpType);」の部分でどうも落ちているようなのですが…。

長文になってしまい申し訳ないです。どなたかご教授願えませんでしょうか?よろしくお願いします。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2004-02-13 11:10
.Netは使ってないのですが、ちょっと興味ある事柄&返信が無い様子なので^^;
引用:

takashiさんの書き込み (2004-02-12 13:26) より:
     CView* pOldActiveView = GetActiveView();←ココ
::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, tmpType);


SetWindowLongで落ちてるという事ですが、ひょっとして、上の矢印の部分でCViewのインスタンスが取得できていないのでは?
(つまり、GetActiveViewでNULLが返ってきているとか?)

メニューがグレー表示される、という事との関連からすると、何かの拍子に「ActiveView」のインスタンスがdeleteされている可能性とかないでしょうか?
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2004-02-17 17:54
冬寂さん、返信どうもありがとうございますm(_ _)m
返信がなくて、まだ一人で悩んでいるところでした^^;

>SetWindowLongで落ちてるという事ですが、ひょっとして、上の矢印の部分でCViewのインスタンスが取得できていないのでは?
>(つまり、GetActiveViewでNULLが返ってきているとか?)

実際に
CView* pOldActiveView = GetActiveView();
の後に pOldActiveViewのポインタを表示してみたところ、メニュー項目がグレー表示になった時はNULLになっていました!
まさにその通りでした。現在なぜNULLになるのか調査中です。何とか解決の糸口が見えてきました。本当にありがとうございました^^
1

スキルアップ/キャリアアップ(JOB@IT)