VBの初心者なんで、よろしくお願いします。
DLLファイルの作成方法と起動の方法を教えてください。
例えば、ACCESSのVBAから、文字列を渡してその文字列をMsgboxを表示させ、成功の場合はTrue、NGの場合はFalseをVBA側に返すDLLファイルを作成するには、どうすればいいですか?
本当に初心者なので、詳細に教えて頂けると幸いです。
よろしくお願いしますm(__)m
MSDNに載っていなかった?…ってーか、VBのバージョン不明。
VB6なら、新規プロジェクトで、ActiveXDLLを選択して、
既定のクラス、Class1に以下のコードを貼り付けて、実行すればいい。
Option Explicit
Public Function foo(ByVal iString As String) As Boolean
foo = MsgBox(iString, vbYesNo) = vbYes
End Function
あと、既定の名前でActiveXDLLを作成すると名前が被ることがあるので、ユニークな名前にしないとだめかもしらん。
で、DLLのプロジェクトをデバッグ中に、そのDLLを使う他のプロジェクトを造る。
そっちでは参照設定でDLLへの参照を追加して、あとは普通のDLLの様に使う。
良く分からない場合はVBのヘルプを熟読すべし。
Cで作る場合は…メッセージボックスを表示するやりかたをしらん。
他の言語も不明だ。
ガッさん、ありがとうございます
しかし、まだうまくいきません
環境なんですが、VB.NET2003でDLLを作成し、Accessのモジュールから呼び出したいと考えています。
そこで、ガッさんに教えてもらった
Option Explicit
Public Function foo(ByVal iString As String) As Boolean
foo = MsgBox(iString, vbYesNo) = vbYes
End Function
をVB.NETのクラスライブラリで作成し、DLLファイルを作成しました。
特にそのほかは何も変更していません
次にACCESSのモジュールで以下を記述し実行したんですが、
「エントリfooがDLLファイルD:\WorkFile\dlltest\bin\dlltest.dll内にみつかりません」と出てしまいます
Option Compare Database
Private Declare Function foo Lib "D:\WorkFile\dlltest\bin\dlltest.dll" (inmsg As String) As Boolean
Public Function aaa()
Call foo("aaaaa")
End Function
再度、アドバイスお願いします。
参照設定でDLLへの参照登録を、D:\WorkFile\dlltest\bin\dlltest.dllで行うと、登録できませんとなってしまいます。
よろしくお願いします。
ぃゃ、オレのは[VB6]と書いて…
.netは書いてあるように、すまないが範疇外なので(orz
---以下質問の質問---
.netで作れるDLLはActiveX系の何かだろうか?(良く分からん…)
それならDeclare文ではなくて、参照設定でDLLを選ぶのかもしらん。
…それ以前に.netのDLLってAccessで使えるのか?(ぇ
すみません
会社には、VB6.0があるんですが、自宅で勉強しながらやってますので・・・
自宅には.netしか入ってないんですよ〜
だから、.netをACCESSで使用できるかわからないんですが・・・
ちなみに、ACCESS+VB6で、同事象(エントリfooがDLLファイルD:\WorkFile\dlltest\bin\dlltest.dll内にみつかりません」と出てしまいます)が発生した場合は、何が原因かわかりますか?
やはり参照設定が出来ていないといけないんですかね???
会社でやった時も同じメッセージが出てしまっているんですよ〜(T.T)
---(=゜ω゜=)---
まぁ、ActiveXDLLなのだったら「外部関数」としてfooを公開しているわけではないのは分かる…な?
分からないのであればdlltest.dllはfooを公開しているのではなく「クラス」を公開している、と考えていい。
ここでVB6などでは、外部関数(API群)としてDLLを使うのと、
外部クラス(ActiveXDLL)としてDLLを使うので、宣言の仕方が違う。
そこで、この場合……ぃゃ、ここまで面倒なことは書かなくても良いのか。
---( -ω-)---
要は、「ActiveXDLLはDeclare宣言ではなく、参照設定で読み込んで使う」。
で、使い方は普通のクラスと同じだ。
おおよそ、dlltest.dllはActiveXDLLなのだろう、Declare宣言を消して、参照設定で使ってみるべし(ダメかもしらんが…)。
分からないときは、MSDNを片っ端から読む…そうやってオレも覚えた記憶がある。
orz…っおぅ…参照設定ダメ、って書いてあるな…
すまん、読み損ねていた。
…となると…あとは.netとAccessとの親和性の問題になるのか…?
そうなると良く分からない…オレより先達の人達が見つけてくれるのを…願うしかない(orz
本当にすまんな、力になれなくて。
ありがとうございます
明日、会社にてVB6で試してみます
今後も、わからない時には掲示しますので、その時はよろしくお願いします
m(__)m
他の方々で分かる人がいましたら、回答お願いします
VB6 + Access で行う場合、きちんと参照設定されていますか?
Declare宣言で行う場合、DLL側にエントリポイントが必要に・・・
ってこれは置いといて、先に参照設定を行わない場合、
CreateObjectで遅延バインディングによる参照設定を行うこともできます。
また、基本ではありますが、VB6で作成されたActiveX DLLは
きちんとレジストリ登録されていますか?
これがされていないと、CreateObjectでエラーが発生しますので。
それから、.NET と Access についてですが、
できたはず、としか言えません。
まだ試してないので。
たぶん、VBからのActiveX Dll の作成は問題ないと思いますが、
AccessのVBAからの使い方が違っていると思います。
参照設定するのか、CreateObjectを使うかは、どちらでもよいのですが、
Declare宣言ではありませんね。
仮に、参照設定したとすれば、
Dim myFunc As New クラス名
rtn = myFunc.foo("aaaaa")
というようになるわけです。だから、ユニークなクラス名をつけたほうがですね。
ツイート | ![]() |