文字列配列渡しについて

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

文字列配列渡しについて

#1 投稿記事 by Tz »

すみません、質問させてもらいます。
プロシージャに配列データを渡す場合、ヘルプには

'---ここから
#N88BASIC

Dim a[10] As Long
Dim i As Long

Sub test(b As *Long)
For i=0 to 10
b=i*10
Next
End Sub

test(a)
For i=0 to 10
Print a
Next
'---ここまで

となっていますが、これを文字列でやろうとすると、

'---ここから
#N88BASIC

Dim a[10] As String
Dim i As Long

Sub test(b As *String)
For i=0 to 10
b=Str$(i*10)
Next
End Sub

test(a)
For i=0 to 10
Print a
Next

'---ここまで
「"b" 型が違います」というエラーが出てうまくコンパイルできないんです。
文字列の配列渡しには、何か特別なことをしないといけないんでしょうか?


AB Ver4.04
OS Win2kSP4
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

Re: 文字列配列渡しについて

#2 投稿記事 by hira »

String型は扱いが難しく、ちょっと面倒なことになるのですが、これで動きます。

コード: 全て選択

#N88BASIC

Dim a[10] As String
Dim i As Long

Sub test(b As *String)
Dim Str As String
    For i=0 to 10
		Str=Str$(i*10)
		_System_HeapStringFree(b)
		b=_System_HeapStringAlloc(Len(Str))
		lstrcpy(b,Str)
    Next
End Sub

test(a)
For i=0 to 10
    Print a
Next

ちなみに「_System_HeapStringAlloc」「_System_HeapStringFree」は、ActiveBasicがString型を作るときに内部で使っている関数です。
Tz

ありがとうございます。

#3 投稿記事 by Tz »

なるほど…
なんだか、難しそうですね…

とりあえず、hiraさんに教えてもらった方法で実装されてもらいます。
ありがとうございました。
返信する