VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/01/25(Sat) 16:20
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^2: 動的配列を返すプロシージャについて

> ちなみに戻り値をString()にするとエラー出る、とのことですがVB6.0では問題なく動いています。
配列を戻り値として返せるようになったのは、VB6からなのです。(^^;
http://www.asia.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/vbcon98/vbmscwhatsnewinlanguagefeaturesvb98.htm


> もしダメそうならnanashiさんの意見通り、戻り値をVariant型で指定してみてください。
そうですね。VB5では、戻り値をVariantにして対処する方法が、一般的だと思います。
Variant型には、配列を格納する事ができますので、今回のような「String配列」を
返すような目的には充分でしょう。

ただし、この方法で返せる配列は、「Variantに格納できるデータ型の配列」に限られます。

StringやLongなどの配列であれば問題はないのですが、VB5のユーザー定義型の場合は、
Variantに格納することができませんので、VB6でいうところの

  Option Explicit
  Public Type TEST
    aa As Long
  End Type
  Public Function Proc() As TEST()
    Dim a(1) As TEST
    a(0).aa = 123
    a(1).aa = 456
    Proc = a
  End Function
  Private Sub Main()
    Dim T() As TEST
    T = Proc()
    Debug.Print T(0).aa + T(1).aa
  End Sub

というコードを、
  Public Function Proc() As Variant
    Dim a(1) As TEST
    a(0).aa = 123
    a(1).aa = 456
    Proc = a
  End Function
のようにして対処する事は、残念ながらできません。


このような場合は、戻り値のかわりに引数を使って
渡すようにする事で、一応は対処する事ができます。

  Public Sub Proc(ByRef a() As TEST)
    ReDim a(1)
    a(0).aa = 123
    a(1).aa = 456
  End Sub
  Private Sub Main()
    Dim T() As TEST
    Call Proc(T)
    Debug.Print T(0).aa + T(1).aa
  End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -