お世話になります。
長々としたタイトルで申し訳ありません。
現在、VB6.0で呼び出すための関数を含むDLLをC++6.0で作成しています。
引数の型が違う同名の関数を複数作成して、これをVB6で呼び出すことは可能でしょうか。
たとえば、C++で"abc.dll"を作成したとして、この中に関数
func_1(short Value);
func_2(long Value);
と言う関数がある場合、VB6側では必要に応じて
Declare Sub func Lib "abc.dll" (Byval Value As Integer)
もしくは
Declare Sub func Lib "abc.dll" (Byval Value As Long)
の宣言のみで必要な関数が呼び出せればと考えております。
関数のオーバーロードそのものになりますが、もしも方法があれば、ご教授願います。
よろしくお願いいたします。
> 引数の型が違う同名の関数を複数作成して
> func_1(short Value);
> func_2(long Value);
DLL 側は、同名の関数には見えませんけれども…。
> 関数のオーバーロードそのものになりますが
VB 側でオーバーロードという意味なら無理です。できることとしては、
Declare Sub funcShort Lib "abc.dll" Alias "func" (〜〜)
Declare Sub funcLong Lib "abc.dll" Alias "func" (〜〜)
のように、型ごとに別名定義するか、
Declare Sub func Lib "abc.dll" (ByVal Value As Any)
のように、Any 型で対応するぐらいでしょうね。
魔界の仮面弁士 様
ご返答いただきましてありがとうございます。
返事が遅れまして申し訳ありません。
> DLL 側は、同名の関数には見えませんけれども…。
申し訳ありません。便宜上1,2と付けさせていただきました。
> VB 側でオーバーロードという意味なら無理です。できることとしては、
> Declare Sub funcShort Lib "abc.dll" Alias "func" (〜〜)
> Declare Sub funcLong Lib "abc.dll" Alias "func" (〜〜)
> のように、型ごとに別名定義するか、
> Declare Sub func Lib "abc.dll" (ByVal Value As Any)
Any型での対応を考えてみようと思います。
また、質問させていただくかと思いますが、よろしくお願いいたします。
どうも、ありがとうございました。
VB6が相手ならば、C側では、
void __stdcall func_v(VARIANT value);
とでもして、その中でswitch(value.vt)で仕分けをし、
VB6側では、
Declare Sub func Lib "abc.dll" Alias "func_v" _
(ByVal Value As Variant)
とするのが無難かと。
ただし、Variant型に格納できる方である必要があります。
ツイート | ![]() |