質問します。
EditBoxに数字を入力しプログラム内部で
その数字を計算させるためにValで変換し
その答えを再び別のEditBoxに表示させるには
Str$を使ったのですがうまくいきません。
Dim a[255] As Byte
Dim b[255] As Double
Dim c As BytePtr
b=Val(a)*10
Sub MainWnd_CommandButton1_Click()
c=Str$(b)
SetDlgItemText(hMainWnd,EditBox2,c)
End Sub
基本的にcをBytePtrにしなければいけないのかが
分かっていないみたいです。
変数を関数に渡すポインタのことを勉強しなければ・・・・・。
どなたかよろしくお願いします。
Sub MainWnd_EditBox1_Change()
GetDlgItemText(hMainWnd,EditBox1,a,255)
End Sub[/code]
文字から数字に
Re: 文字から数字に
> Sub MainWnd_CommandButton1_Click()
> c=Str$(b)
> SetDlgItemText(hMainWnd,EditBox2,c)
> End Sub
BytePtr型変数はまず必要に応じてmalloc()かcalloc()関数でメモリを確保しなければなりません。
BytePtrに関する関数は、lstrcpy(),lstrcat(),lstrlen(),lstrcmp()などがあるのでヘルプを読んで下さい。
確保したメモリは使い終わったらfree()関数で解放する必要があります。
> c=Str$(b)
> SetDlgItemText(hMainWnd,EditBox2,c)
> End Sub
BytePtr型変数はまず必要に応じてmalloc()かcalloc()関数でメモリを確保しなければなりません。
BytePtrに関する関数は、lstrcpy(),lstrcat(),lstrlen(),lstrcmp()などがあるのでヘルプを読んで下さい。
確保したメモリは使い終わったらfree()関数で解放する必要があります。
とっても暇だったので一カ所に固めてしまいました。
見づらいとかそういうのは…気にしないでください(爆
見づらいとかそういうのは…気にしないでください(爆
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
Dim szStr[255] As Byte
GetDlgItemText(hMainWnd,EditBox1,szStr,255)
SetDlgItemText(hMainWnd,EditBox2,Str$(Val(szStr)*10))
End Sub
Re: 二倍勉強になった。
解決済みのようですが、蛇足でつっこんで(?)みます。
もちろん必要な分だけ確保するのが正しいのですが、
いまどきのパソコンであれば、少々無駄に多く確保したところで、
影響は高が知れていると思います。
以下、蛇足の蛇足。
無駄に多く確保して困った例としては・・・ローカルの配列を静的にたくさん
宣言しすぎたときに、実は確保に失敗しているのにエラーメッセージがでず、
関数を抜けるときに開放エラーしたことがあります。
エラー発生箇所と原因箇所がずれていたので、特定にやたら苦労しました。
確か256Byte×10以上は確保してたかと。C++の話ですけど。
ABでも同じように確保しすぎて落ちたことがあります(数値は忘れました)。
こちらはコンパイル自体が通りませんでしたけど。
これらはどちらも静的確保の場合の話なので、動的(calloc等)に確保する分には
問題は起きないと思います。少なくとも私は起きたことがありません。
起きた(確保失敗)としても、try,catchなどの例外処理がABにはまだ
無かったと思うので、手のうちようがないですし・・・^^;
基本的には支障ないです。任三郎さん さんが書きました:> しかしメモリ確保って多めでも支障ないのですかね?
もちろん必要な分だけ確保するのが正しいのですが、
いまどきのパソコンであれば、少々無駄に多く確保したところで、
影響は高が知れていると思います。
以下、蛇足の蛇足。
無駄に多く確保して困った例としては・・・ローカルの配列を静的にたくさん
宣言しすぎたときに、実は確保に失敗しているのにエラーメッセージがでず、
関数を抜けるときに開放エラーしたことがあります。
エラー発生箇所と原因箇所がずれていたので、特定にやたら苦労しました。
確か256Byte×10以上は確保してたかと。C++の話ですけど。
ABでも同じように確保しすぎて落ちたことがあります(数値は忘れました)。
こちらはコンパイル自体が通りませんでしたけど。
これらはどちらも静的確保の場合の話なので、動的(calloc等)に確保する分には
問題は起きないと思います。少なくとも私は起きたことがありません。
起きた(確保失敗)としても、try,catchなどの例外処理がABにはまだ
無かったと思うので、手のうちようがないですし・・・^^;