• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6 - DLLの動的リンクの方法について)

VB6 - DLLの動的リンクの方法について

このQ&Aのポイント
  • VB6で統合アーカイバプロジェクトのDLLを遅延バインディングする方法はあるのでしょうか?
  • VB6では遅延バインディングを行うことができず、現在は全てのDLLの全ての関数に対してDeclare節を使用しています。
  • VB.netでは遅延バインディングを行うことができるが、VB6での方法は見つかりませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.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/#multimedia02 あとは、UNLHA32.DLLとかとVBの間に1つC++等で作った特殊なDLLをかますとかですね。 http://www.koalanet.ne.jp/~akiya/vbtaste/dll/

Futosi
質問者

お礼

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

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>現在は全てのdllの、全ての関数に対してDeclare節を使用しているのですが、これでは統合アーカイバプロジェクトの仕様を全く役立てられていないということになります。 Declareステートメントは、該当のDLLの関数が初めて呼び出されるタイミングでDLLがロードされます。 よって、遅延ロードです。 exeの起動時にDLLが無いからといってエラーにはなりません。

Futosi
質問者

補足

回答ありがとうございます。 質問が悪かったようで申し訳ございません。 あと、遅延バインディングの使い方も間違っていたですか、申し訳ないです。 ご説明の >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があれば対応形式が増える、というものを目指しているのですが、こういった処理をすることはできるのでしょうか、という質問でした。 質問する側の不備、まことに申し訳ありません。

関連するQ&A