[AB Ver4.01.02] 配列の関数パラメータ引き渡しに対応

ActiveBasic製ソフトウェア、またはABサイドのソフトウェアを開発された方は、こちらへご紹介ください。関連Webサイトの紹介などもこちへ。
返信する
メッセージ
作成者
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

[AB Ver4.01.02] 配列の関数パラメータ引き渡しに対応

#1 投稿記事 by 山本 »

HelpCenter さんが書きました:多次元配列を引き渡すときは、仮引数に配列要素を指定する必要があります。具体的には、下記のように値参照で配列ポインタを引き渡します。コンパイラは、仮引数の配列指定(要素のカッコ)を認識した時点で、そのパラメータが配列ポインタの値参照であると解釈します。

実引数には、配列名のみを指定します。カッコ及び要素の指定は必要ありません。

この引き渡し方法は、具体的には配列のポインタのみを引き渡しています。よって、関数内で配列の内容が変えられると、その変更は実引数にも影響します。この引き渡し方法は多次元配列の引き渡しに有効な手段ですが、1次元配列に対しても行えます。

コード: 全て選択

#N88BASIC

Dim data[9,9] As Long

Sub GetData(a[9,9] As Long)
    Dim i As Long, j As Long
    For j=1 To 9
        For i=1 To 9
            a[j,i]=i*j
        Next
    Next
End Sub

Sub ShowData(a[9,9] As Long)
    Dim i As Long, j As Long
    For j=1 To 9
        For i=1 To 9
            Print Using "###";a[j,i];
        Next
        Print
    Next
End Sub

'両者の関数ともに、配列ポインタを引数として渡す
GetData(data)
ShowData(data)
↑はヘルプセンターの一部を抜粋したものです。

Ver4.01.02で、配列(多次元配列も可)を関数パラメータとして引き渡せるように改良しました。具体的には、配列ポインタの引き渡しになります。
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#2 投稿記事 by 山本 »

Ver4.01.02の段階では、DLL関数に多次元配列を渡すことができないので、こちらは次回のバージョンアップで対応しようと思います。

現時点では、Declare定義のパラメータをポインタ型に書き換えて、対処してください。

コード: 全て選択

'--------
' 例
'--------

'DLL用のソース
Function Export Test(k[2,2] As Long)
    MessageBox(0, Str$(k[0,0])+":"+Str$(k[0,1])+":"+Str$(k[1,0])+":"+Str$(k[1,1]), "表示テスト", 0) 
End Function

'メインソース
Declare Function Test Lib "sougi" (k As *Long) As Long

Dim data0[2,2] As Long
data0[0,0]= 1
data0[0,1]= 2
data0[1,0]= 3
data0[1,1]= 4
Test(data1)
返信する