ども、あぴあです。
VBは、ほぼ初心者に近いのですが(元々C/C++系あがり)
C言語で作成したDLLをVBで呼び出す方法について質問です。
VBでDLLを呼び出す基本はDECLARE文により関連するライブラリ及び
実際に使用するDLL内のメソッド名を記述するようですが、
この呼び方というのは静的な呼び方ですよね?
要は、コンパイル時にライブラリ等を読み込んVB内で定義されているDLLの
メソッドしか使うことが出来ないということだと思っています。
今回、私が行ないたいのはVBで可能かどうかは未確認(MSDNやネット上では
見つけることが出来なかったです)ですが、動的にDLLをロードさせることは
可能でしょうか。
VCでいうなれば、APIでのGetProcAddress等を使用したDLLのロードや
メソッドの使用方法です。
ご存知の方がいらっしゃいましたら、ご教授願います。
VB的には、VC側をデュアルインターフェイスを持ったCOM DLLとして作成し、
それをレイトバインディングで呼び出すようにした方が良いかと思います。
> GetProcAddress等を使用したDLLのロード
下記のようにすれば理論的には可能ですが、おすすめはできません。
http://members.tripod.com/~masapico/doc_FuncPtr.html
VB6でしょうか、VB6で関数ポインタを使うことは出来ません。
VB.NETではDelegateで可能です。
もちろんDLLからDLLを呼ぶ2重呼び出しを使えばVB6でも可能かと思われますが
質問者の意図には合わないでしょう。
被った!2分差。
なに出来る!(^^;
魔界の仮面弁士さん,ねろさん,アドバイスありがとうございます。
以下のURLを見てみました。
>http://members.tripod.com/~masapico/doc_FuncPtr.html
内容的にはVC++での記述とは変わりないようですね。
ただ、以前VC++で動的DLLの呼出を行なったのですが周囲からも
あまりGetProcAdressを使った読込みはよろしくない、というより
怪しいと言われていました。
動的呼び出しは、機能(DLL)が無ければないで動作継続ができる面が良い
と思っていましたが・・・。あまり実用的ではないようですね。
基本的に動的はよろしくないと考えた方が良いでしょうか。
現在、VB6.0にて作業を行なっています。
あまりVB6.0は好きじゃないんですけど・・・私は意外にVB批判派なんです。
「ランタイム問題やCOMを使用するとオーバーヘッドが大きいなど」
ただ、.NETのVBでは、その辺も他言語(C/C++など)と問題ない処理速度の
ようですね。
ツイート | ![]() |