tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
動的配列を返すプロシージャ(VB6.0)_2 ( No.2 )  [親スレッドへ]
日時: 2011/04/05 11:34
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[基本コード][][]                                                    *
* キーワード:関数,プロシージャ,戻り値,,,                                         *
***********************************************************************************

-----------------------------------------------------------------------------------
Re^2: 動的配列を返すプロシージャについて - 魔界の仮面弁士 2003/01/25-16:20 No.2426
-----------------------------------------------------------------------------------

> ちなみに戻り値を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




 [スレッド一覧へ] [親スレッドへ]