ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月25日(木) 04:59

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年1月13日(金) 13:02 
凄く基本的な質問なのですが、検索しても良く分からなかったので質問します。

「厳密な型チェックを行う(#strict指定)」、は今まで使ってなかったのですが、
試しにチェックしてみると、100件以上の警告が出ました。
ほとんどが「強制変換されている」というもので、数件「データが失われる可能性」とありました。
しかし、作ったソフトは、何の問題もなく思った通りに動いてくれてます。
そもそも、この警告というのは直さないとどうなるのでしょう?
ある特定条件下では、不具合を起こしたりするのでしょうか?

二つ目の質問です。
以下の二つはどちらでも、動作に問題はありません。
ですが、他の人のサンプルをみると、どちらの記述法もあります。
勿論、GetDlgItemやハンドルだけに限らない話です。
つまり、変数に取得した物を入れといて、新たに式に入れる物と、
取得しつつ、同時に式に入れてる物の違いはあるのかという質問です。
コード:
	handl = GetDlgItem(hMainWnd,ComboBox8)
	intVal = SendMessage(handl,CB_GETCURSEL,0,0)
と、
	intVal = SendMessage(GetDlgItem(hMainWnd,ComboBox8),CB_GETCURSEL,0,0)
どなたか、この事に関して教えてくれると幸いです。お願いします。


通報する
ページトップ
   
投稿記事Posted: 2006年1月13日(金) 19:25 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
総一郎さんの示されたコードですが、実質的には違いはありません。
しかし、1度変数に戻り値を格納してから引数に指定すると、引数の型が間違っていた場合に予想外の結果になることがあります(例えば10万までの整数を返す可能性のある関数について、戻り値をWordに格納したなど)。
それから#strictについてですが、「データが失われる」とは次のような状況です。
コード:
Function test(n As DWord) As DWord
    test=n*2
End Function

Dim a As Word
a=test(2000)
このようなコードは、最後の行で警告が出ます。
これはDWord→Wordへの強制変換で、上の例ではaは4000となります。
しかし、例えば引数が50000のとき、aに入る値は34464となってしまいます(計算結果がWord型の値の上限である65535を超えるため)。
「データが失われる」とはこういうことなのですが、もちろん引数に大きな値を指定しなければ全く問題ありませんので、
キャストをするなどして対応してください(要するにコンパイラに「これは意図した動作ですよ」と言ってあげるわけですね)。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
投稿記事Posted: 2006年1月14日(土) 17:29 
hiraさん、返信ありがとうございます。

なるほど。違いがないなら一行で済むし、使う変数も減らせるので、
これからは以下の形式にします。
コード:
intVal = SendMessage(GetDlgItem(hMainWnd,ComboBox8),CB_GETCURSEL,0,0) 
強制変換は、ただ、違う型間でデータをやり取りしたという話なのか。
「データが失われる」というのも良く分かりました。
上限を超える様な使い方もしてないし、無視しても大丈夫なんですね。

そんなに大きな問題では無い事が分かって安心しました。
ありがとうございました。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年1月14日(土) 22:48 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
ところでSendMessage(GetDlgItemよりもSendDlgItemMessageという関数があります。
こちらを使ってはどうでしょうか。


通報する
ページトップ
 記事の件名: キャストって言えば
投稿記事Posted: 2006年1月15日(日) 00:19 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
String型がキャストできないのが残念です。お蔭様でcommand.sbp、Callback.wbp、function.sbp等でかなりの数の警告が検出されます^^;

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2006年1月16日(月) 16:45 
イグトランスさん、konisiさん、返信ありがとうございます。

SendDlgItemMessageなんて物があったんですね。
知りませんでした。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Bing [Bot] & ゲスト[20人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean