投稿日 | : 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