プログラムが違うのか、それとも仕様か

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ganas
記事: 19
登録日時: 2006年3月04日(土) 00:39

プログラムが違うのか、それとも仕様か

#1 投稿記事 by ganas »

こんにちは。はじめまして。

最近、ActiveBasic(バージョンは4.21.00)をはじめて、外部DLL呼び出しやクラスの処理も学び始めましたが、どうしてもわからないことが2つあります。

1.変数の値がリセットされている?
このプログラムの

コード: 全て選択

MainWnd_Paint(hDC As HDC)
という部分に、BOOL型を指定してある変数の値により、二度のコードの実行を回避するように設計しましたが、ウィンドウを最小化した後、元の大きさに戻すと、再度実行されてしまいます(音楽が最初から再生される)。

2.クラスがうまく動かない
1.の時のコードで、

コード: 全て選択

'CWMain.Wait(3000)
というように、2.のコードにある、クラスに定義したWait関数を使用し、実行しようとしたところ、["CWMain.Wait" 無効な識別子です]というエラーが発生し、実行できませんでした。


これがプログラムのミスなのか、それとも仕様なのか(バグではないと思ってます)、教えていただきたいです。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#2 投稿記事 by 7 »

コード丸写しでテストしてる訳じゃないので的確な答えになってないかもしれません。

> 1.変数の値がリセットされている?
こちらの環境(Ver.4.22.00)ではグローバル変数CallOnce_funcGameMainはリセットされていません。 提案なんですが、MainWnd_Create()関数実行時にGameMain()関数を実行したらどうでしょう?

> 2.クラスがうまく動かない
CWaitクラスのWait_Count()関数はFunction定義ですが、"End Sub"になっています。
これを"End Function"にすると改善しませんか?
ganas
記事: 19
登録日時: 2006年3月04日(土) 00:39

#3 投稿記事 by ganas »

ありがとうございます。

2.は完全な私のミスでした(Visual BASICやC++から移行したために自動修正に慣れてしまっていた)。

1.に関しては、最新版をインストールして、もう一度テストしてみます。
ひとまず今日はもう遅いので、後日テストします。
ganas
記事: 19
登録日時: 2006年3月04日(土) 00:39

#4 投稿記事 by ganas »

よくプログラムを見ていたら、Do ... Loopに入っていて、値に変更が加えられない状況におかれていたことに気が付きました。ケアレスミスです。

しかし、以前、String型の変数からString型の変数に代入した値が消滅した、ということがあったので、少々思い込みがあったかもしれません。


String型の値をString型に代入することにより、値が消滅した原因と思われること:

メッセージループがあるところ(プロジェクト名.abp)のグローバル宣言に、変数(String型)を1つ指定して、関数の引数(String型)の値をグローバル宣言した変数に代入し、それをウィンドウのプログラム(MainWnd.sbp)が書かれているところで使用しようとしたところ、データが失われてしまった(プロジェクト生成時に[厳密な型チェック]を有効にしておいたので、おそらく変数の定義に問題は無いはず)。
返信する