文字から数字に

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
任三郎

文字から数字に

#1 投稿記事 by 任三郎 »

質問します。

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]
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: 文字から数字に

#2 投稿記事 by 7 »

> Sub MainWnd_CommandButton1_Click()
> c=Str$(b)
> SetDlgItemText(hMainWnd,EditBox2,c)
> End Sub
BytePtr型変数はまず必要に応じてmalloc()かcalloc()関数でメモリを確保しなければなりません。
BytePtrに関する関数は、lstrcpy(),lstrcat(),lstrlen(),lstrcmp()などがあるのでヘルプを読んで下さい。

確保したメモリは使い終わったらfree()関数で解放する必要があります。
みどるべあ
記事: 25
登録日時: 2005年11月13日(日) 15:25
連絡する:

#3 投稿記事 by みどるべあ »

とっても暇だったので一カ所に固めてしまいました。
見づらいとかそういうのは…気にしないでください(爆

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
   Dim szStr[255] As Byte
   GetDlgItemText(hMainWnd,EditBox1,szStr,255)
   SetDlgItemText(hMainWnd,EditBox2,Str$(Val(szStr)*10))
End Sub
任三郎

二倍勉強になった。

#4 投稿記事 by 任三郎 »

みどるべあさん、7さん

ありがとうございました。
2通り試せて二倍に勉強できました。

しかしメモリ確保って多めでも支障ないのですかね?

まだまだですね・・・。

またお願いします。
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

Re: 二倍勉強になった。

#5 投稿記事 by 淡幻星 »

解決済みのようですが、蛇足でつっこんで(?)みます。
任三郎さん さんが書きました:> しかしメモリ確保って多めでも支障ないのですかね?
基本的には支障ないです。
もちろん必要な分だけ確保するのが正しいのですが、
いまどきのパソコンであれば、少々無駄に多く確保したところで、
影響は高が知れていると思います。


以下、蛇足の蛇足。
無駄に多く確保して困った例としては・・・ローカルの配列を静的にたくさん
宣言しすぎたときに、実は確保に失敗しているのにエラーメッセージがでず、
関数を抜けるときに開放エラーしたことがあります。
エラー発生箇所と原因箇所がずれていたので、特定にやたら苦労しました。
確か256Byte×10以上は確保してたかと。C++の話ですけど。
ABでも同じように確保しすぎて落ちたことがあります(数値は忘れました)。
こちらはコンパイル自体が通りませんでしたけど。
これらはどちらも静的確保の場合の話なので、動的(calloc等)に確保する分には
問題は起きないと思います。少なくとも私は起きたことがありません。
起きた(確保失敗)としても、try,catchなどの例外処理がABにはまだ
無かったと思うので、手のうちようがないですし・・・^^;
返信する