VB6.0のEXEと同階層に配置されたEXE形式以外で作成されたVBプログラムを読み込む方法はあるのでしょうか?
目的としては既に作成されたEXEが用意されていて、再コンパイルせずに、
EXE形式以外で作成されたVBプログラムファイル(以下、"外部プログラム"と記述します)を
EXEと同階層に配置するだけで外部プログラムの機能を利用したいのです。
※もちろん、EXE側には外部プログラムを読み込むための記述が必要だと思いますが。
過去ログで調べましたところ、ActiveX DLLを利用する方法が紹介されていますが、
この場合、DLLが増えるたびにEXEの再コンパイルが必要ではないでしょうか?
EXEからは
外部プログラム1.関数名(引数,引数,引数)
外部プログラム2.関数名(引数,引数,引数)
外部プログラム3.関数名(引数,引数,引数)
・・・
というような呼び出し方法をとりたいのです。
外部プログラム名はEXEと同階層に配置された外部プログラムファイルを総ナメして取得する。(これは可能でしょうか?)
関数名、引数、戻り値は全ての外部プログラムで仕様を統一します。
このような方法がVB6.0で可能なのでしょうか?
可能であれば参考になるリファレンス、書籍、WEBサイトなど紹介いただければ幸いです。
宜しくお願いします。
【環境】
WIN2000 PRO SP4、WINXP HOME SP2
VB6.0 SP5
> この場合、DLLが増えるたびにEXEの再コンパイルが必要ではないでしょうか?
レイトバインドで実装すれば問題ないかと。
魔界の仮面弁士 様 書き込みありがとうございます。
なるほど、DLL有り前提で作成するEXEだと、アーリーバインドで宣言して、
有るか無いか分からないDLLを利用する場合はレイトバインドで宣言するのですね。
こういう手段の有無から知らなかったので、大変助かります。
>>外部プログラム名はEXEと同階層に配置された外部プログラムファイルを総ナメして。
>>関数名、引数、戻り値は全ての外部プログラムで仕様を統一。
この部分を実現しようとすると、、、
Dim objGaibuProgram() As Object
Do While ' EXEと同階層総ナメするまで
Set objGaibuProgram(i) = CreateObject("外部プログラム.クラス名").関数名
Loop
こんな感じになるんでしょうかね。
ttp://www.int21.co.jp/pcdn/vb/vb5/bind/
こちらの記述を読んでみると、レイトバインドでは遅くなる可能性が指摘されているようですね。
今回の私の目的の場合、レイトバインドしか方法が無いのかもしれませんが。
早速試してみます。
ちなみに参考になりそうな書籍などがありましたら紹介いただけないでしょうか?
そのサイトのシメの文。
>>まず実際にやってみて、その場その場で最も良い方法を選んでいかなければならないし、 このような経験の積み重ねが、ノウハウという財産になっていくのではないかと思います。
通ってみた 様 書き込みありがとうございます。
簡単なサンプルを作って試してみました。
まずは単純にひとつだけ、、、
Dim obj As Object
Set obj = CreateObject("Project2.Class1")
obj.fncAction
ちゃんとdll内の関数呼び出せました。
次に配列で試してみました。
Dim objArray(1 To 5) As Object
Dim i As Integer
For i = 1 To 5
Set objArray(i) = CreateObject("Project2.Class1")
Next i
objArray(3).fncAction
これもすんなりとおりました。
Dim objArray() As Object
Dim i As Integer
Set objArray(1) = CreateObject("Project2.Class1")
Set objArray() = CreateObject("Project2.Class1")
このSetは上手くいきませんでした。
Object型の配列宣言はしっかりしないと駄目ということでしょうかね。
このまま、いろいろ自分なりにも調べつつ試していきます。
ありがとうございました。
> このSetは上手くいきませんでした。
「ReDimステートメント」で、事前に配列サイズを割り当てましょう。
魔界の仮面弁士 様 書き込みありがとうございます。
>「ReDimステートメント」で、事前に配列サイズを割り当てましょう。
今、ちょうどそこに気が付きました。
アドバイスありがとうござます。
ツイート | ![]() |