- 日時: 2009/12/27 12:39
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[基本コード][][] * * キーワード:配列処理,プロシージャ,複数の引数,関数,複数の戻値,配列処理関数 * ***********************************************************************************
元質問:配列の値と個数を引数として - TM 2004/10/05-18:41 No.556
標記の件ですが、たとえば Private Sub AAA() Dim a(2) As Integer a(0) = 1 a(1) = 2 a(2) = 3 Call BBB(2, a(0)) End Sub
Private Sub BBB(b As Integer, c As Variant) Dim i As Integer For i = 0 To b Call MsgBox(c(i)) Next i End Sub
実行結果: 1 2 3
のようなことをやりたいのです。 つまり、配列の個数と、配列の最初の値を引数で渡すと、その個数分のデータを参照できる関数を作りたいのですが、当然のことながらcに1が代入されるだけなので上記ではエラーになってしまいます。 Call BBB(a) Private Sub BBB(d() As Integer) とすれば配列で渡せるのは知っているのですが、既存の通信パッケージの関数が上記の形となっていてそのボードがない時のシミュレーションを行いたいため、引数の形を同じにしなければなりません。 パッケージがやっているので、できないことはないのでしょうが、私には方法がわかりません。よろしくお願いします。
--------------------------------------------------------------------------- Re: 配列の値と個数を引数として - YAS 2004/10/05-23:29 No.560 ---------------------------------------------------------------------------
配列をポインタで渡しているようなので,以下のようになると思います。 BBBでは必要なメモリを配列で確保して,APIでコピーしています。
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub AAA() Dim a(2) As Integer a(0) = 1 a(1) = 2 a(2) = 3 Call BBB(2, a(0)) End Sub
Private Sub BBB(b As Integer, c As Integer) Dim a() As Integer ReDim a(b) Call CopyMemory(a(0), c, LenB(c) * (b + 1)) Dim i As Integer For i = 0 To b Call MsgBox(a(i)) Next i End Sub
|