関数の引数に、場合によって違うユーザ定義型の変数を指定するには?

解決


たき  2003-07-22 15:48:47  No: 107856  IP: [192.*.*.*]

ファイルを読み込んで、ユーザ定義型変数に格納する関数があり、
その関数の引数に格納したいユーザ定義型変数をByrefで渡すのですが、
ユーザ定義型変数にはメンバ変数の型が違う3つの種類があり、
読み込むファイルによって使い分けています。
ファイルを読み込んで値を格納する処理自体にはほとんど違いは無い為、
引数を『変数の種類』と『格納するユーザ定義型変数』の2つに増やし、
変数の種類によって関数内部で処理を切り替えたいと思っております。
例.
  呼び出し側
  Call testproc(A)
  Call testproc(B)
    AとBは型の違うユーザ定義型変数

  関数側
  Public Function testproc(Byref xxx As Variant)

最初は上記のようにVariant型で引数を宣言してみたのですが、
『パブリック オブジェクト モジュールで定義された〜』と
コンパイルエラーが出てしまいます。
こういった、場合によって渡すユーザ定義型変数を変えれる引数を持つ
関数を作ることは出来ないのでしょうか?

編集 削除
魔界の仮面弁士  2003-07-22 16:17:32  No: 107857  IP: [192.*.*.*]

ユーザー定義型をVariant型にて引き渡す【※注】ためには、
それが「レジストリに登録されたデータ型」でなければいけません。

VB6の場合は、ActiveX EXE等を作成し、Instancingプロパティが
Private以外に設定されたクラスモジュールにて、その中で
ユーザー定義型をPublic宣言しておく事になります。

という事で、対処案としては…。

案1:
 ユーザ定義型Aとユーザ定義型Bの両方を引数とする。

案2:
 上記の手順でパブリックなユーザー定義型を作成しておき、
 それをVariant型引数で受け渡す。

案3:
 ユーザー定義型を使うのを止めて、かわりにクラスモジュールに変更し、
 それをObject型引数で受け渡す。

案4:
 バイト配列を受け渡すようにして、それをRtlMoveMemory APIにて
 任意のユーザー定義型にコピーする。


--
【※注】これはVB6の場合です。
VB5では、ユーザー定義型をVariantに格納できません。

編集 削除
たき  2003-07-23 09:29:59  No: 107858  IP: [192.*.*.*]

分かりやすいレスどうもありがとうございます。
ただ、今回のプログラムでは、ActiveX.exeを使うことが出来ないのと、
ユーザ定義型を変更したり、使わないようにすることが出来ない為、
案1を使ってプログラムを作ることにします。

編集 削除