標準モジュールでユーザ定義型を宣言し、クラスで配列として宣言するActiveXDLLを作成しています。この配列の値をASP等から取得するいい方法を教えて頂きたいのです。
TESTDLL.Class1.UserAry(1).Name などという風には取得出来ないものでしょうか?宜しくお願いします。
===Module1====================
Type USER_ARY
Name As String
Mail As String
End Type
===Class1=====================
Private UserAry() As USER_ARY
Private Sub Class_Initialize()
Redim UserAry(1)
UserAry(0).Name = "TEST0"
UserAry(1).Name = "TEST1"
End Sub
==============================
Publicなクラスモジュールで定義されたユーザー定義型であれば、
Variant型に格納することもできるため、VBScriptでも処理できます。
しかし、VBScript自体はユーザー定義型をサポートしていないため、
たとえユーザー定義型の値を受け取れたとしても、それを使用するには
いろいろな制限が付いて回ります。
VBScriptでの使用を考えるのであれば、ユーザー定義型は使用せず、
クラスとして返すように設計する事をお奨めします。
お返事ありがとうございます。
クラスでpublicな配列の宣言ができないため、やはり外部からの
配列の取得方法に苦慮しております。クラス内で作成した配列を外部から
取得したい場合、どのようにすれば良いでしょうか?
--(class1)-----------------------
Private pUserName() As Variant
Public Sub getAry(ByRef Names() As Variant)
Names = pUserName
End Sub
Private Sub Class_Initialize()
ReDim pUserName(0)
pUserName(0) = "hoge0"
End Sub
--(vbscript)---------------------
Set objCls = CreateObject("TESTDLL.Class1")
Call objCls.getAry(Names) <--- 型エラー発生
---------------------------------
配列のコピーで取得を試みましたが、VBscriptからは「型が一致しません」
とエラーなります。。。
> クラス内で作成した配列を外部から取得したい場合、どのようにすれば良いでしょうか?
==========================
Option Explicit
Private pUserName() As Variant
Public Function getAry() As Variant()
getAry = pUserName
End Function
Private Sub Class_Initialize()
ReDim pUserName(0)
pUserName(0) = "hoge0"
End Sub
==========================
Option Explicit
Dim Names
Names = CreateObject("TESTDLL.Class1").getAry()
MsgBox Names(0)
==========================
元のソースを活かすなら、こうかな。
==============================
Option Explicit
Private pUserName() As Variant
Public Function getAry(ByRef Names As Variant)
Names = pUserName
End Function
Private Sub Class_Initialize()
ReDim pUserName(0)
pUserName(0) = "hoge0"
End Sub
==============================
Option Explicit
Dim Names, objCls 'Dim Names()でもOKかも
Set objCls = CreateObject("TESTDLL.Class1")
Call objCls.getAry(Names)
Call MsgBox(Names(0))
==============================
魔界の仮面弁士さん、どうもありがとうございます!
ソースの間違いまでご指摘頂き、お恥ずかしいばかりです。
重ね重ねお礼申し上げます。