重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

統合アーカイバプロジェクトのdllを使用した解凍ツールを作ろうと思っているのですが、dllを遅延バインディングする方法はあるのでしょうか?
現在は全てのdllの、全ての関数に対してDeclare節を使用しているのですが、これでは統合アーカイバプロジェクトの仕様を全く役立てられていないということになります。

○Library系のAPIで得られる関数へのポインタはVBで利用することは原則的に不可能
○rundllは返り値を取れないため不適切
○VB.netでは遅延バインディングを行うことができる
という程度のことは調べることができましたが、VB6での遅延バインディングを実現する方法については見つけることができませんでした。

どなたかご存知の方よろしくご教授願います。

A 回答 (2件)

>>exeの起動時にDLLが無いからといって~


>は検証済みです、ご指摘ありがとうございます。
>これをレイトバインディングというのですね。

普通は言いません。
レイトバインディング、アーリーバインディングはActiveXでの型の解決方法を指します。


>これを回して、1回目で
>Declare Function UnlhaGetVersion% Lib "Unlha32" ()を、2回目で
>Declare Function UnzipGetVersion% Lib "Unzip32"
()
>をそれぞれロードする、というようにDeclare節の定義を簡略化させたいのです。

言語使用としてDeclareステートメントを使用する限り絶対に不可能です。


#まぁ、9x系でしたらLoadLibraryとGetProcAddress、できないことも無いんですが、おすすめしません。
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/#mu …

あとは、UNLHA32.DLLとかとVBの間に1つC++等で作った特殊なDLLをかますとかですね。
http://www.koalanet.ne.jp/~akiya/vbtaste/dll/
    • good
    • 0
この回答へのお礼

回答ありがとうございます、とても勉強になりました。
「言語仕様として不可能」ということを聞けただけで、充分にこの質問を立てた意味があります。
また、参考URLまで調べていただき、感謝の限りです。
C++で橋渡しのDLLを作るのが解決策ですね、勉強を兼ねてそれを作ってみることにします。

お礼日時:2005/03/07 00:07

>現在は全てのdllの、全ての関数に対してDeclare節を使用しているのですが、これでは統合アーカイバプロジェクトの仕様を全く役立てられていないということになります。



Declareステートメントは、該当のDLLの関数が初めて呼び出されるタイミングでDLLがロードされます。
よって、遅延ロードです。

exeの起動時にDLLが無いからといってエラーにはなりません。

この回答への補足

回答ありがとうございます。

質問が悪かったようで申し訳ございません。
あと、遅延バインディングの使い方も間違っていたですか、申し訳ないです。

ご説明の
>exeの起動時にDLLが無いからといって~
は検証済みです、ご指摘ありがとうございます。
これをレイトバインディングというのですね。

For I = 1 To 2
Me("Command" & I).Caption = "hogehoge"
Next I

のような感じで
[archivername][funcname]をDeclare節で定義したいのです。

Join(strArcType,",") = "Unlha,Unzip" となる配列変数があり、

For I = 0 To UBound(strArcType)
Declare Function strArcType(I) & "GetVersion%" _
Lib strArcType(I) & "32" () As Long
Next I

これを回して、1回目で
Declare Function UnlhaGetVersion% Lib "Unlha32" ()を、2回目で
Declare Function UnzipGetVersion% Lib "Unzip32"
()
をそれぞれロードする、というようにDeclare節の定義を簡略化させたいのです。

Susie Plug-Inのような感じでdllがあれば対応形式が増える、というものを目指しているのですが、こういった処理をすることはできるのでしょうか、という質問でした。

質問する側の不備、まことに申し訳ありません。

補足日時:2005/03/05 03:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!