DLLファイルについて教えてください


VB初心者  2004-10-24 10:49:11  No: 86216

VBの初心者なんで、よろしくお願いします。
DLLファイルの作成方法と起動の方法を教えてください。
例えば、ACCESSのVBAから、文字列を渡してその文字列をMsgboxを表示させ、成功の場合はTrue、NGの場合はFalseをVBA側に返すDLLファイルを作成するには、どうすればいいですか?
本当に初心者なので、詳細に教えて頂けると幸いです。
よろしくお願いしますm(__)m


ガッ  2004-10-24 13:37:34  No: 86217

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初心者  2004-10-25 08:24:50  No: 86218

ガッさん、ありがとうございます
しかし、まだうまくいきません
環境なんですが、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で行うと、登録できませんとなってしまいます。

よろしくお願いします。


ガッ  2004-10-25 08:59:50  No: 86219

ぃゃ、オレのは[VB6]と書いて…
.netは書いてあるように、すまないが範疇外なので(orz
---以下質問の質問---
.netで作れるDLLはActiveX系の何かだろうか?(良く分からん…)
それならDeclare文ではなくて、参照設定でDLLを選ぶのかもしらん。
…それ以前に.netのDLLってAccessで使えるのか?(ぇ


VB初心者  2004-10-25 09:32:57  No: 86220

すみません

会社には、VB6.0があるんですが、自宅で勉強しながらやってますので・・・
自宅には.netしか入ってないんですよ〜
だから、.netをACCESSで使用できるかわからないんですが・・・

ちなみに、ACCESS+VB6で、同事象(エントリfooがDLLファイルD:\WorkFile\dlltest\bin\dlltest.dll内にみつかりません」と出てしまいます)が発生した場合は、何が原因かわかりますか?
やはり参照設定が出来ていないといけないんですかね???
会社でやった時も同じメッセージが出てしまっているんですよ〜(T.T)


ガッ  2004-10-25 10:04:50  No: 86221

---(=゜ω゜=)---
まぁ、ActiveXDLLなのだったら「外部関数」としてfooを公開しているわけではないのは分かる…な?
分からないのであればdlltest.dllはfooを公開しているのではなく「クラス」を公開している、と考えていい。

ここでVB6などでは、外部関数(API群)としてDLLを使うのと、
外部クラス(ActiveXDLL)としてDLLを使うので、宣言の仕方が違う。

そこで、この場合……ぃゃ、ここまで面倒なことは書かなくても良いのか。

---( -ω-)---
要は、「ActiveXDLLはDeclare宣言ではなく、参照設定で読み込んで使う」。
で、使い方は普通のクラスと同じだ。
おおよそ、dlltest.dllはActiveXDLLなのだろう、Declare宣言を消して、参照設定で使ってみるべし(ダメかもしらんが…)。
分からないときは、MSDNを片っ端から読む…そうやってオレも覚えた記憶がある。


ガッ  2004-10-25 10:07:36  No: 86222

orz…っおぅ…参照設定ダメ、って書いてあるな…
すまん、読み損ねていた。
…となると…あとは.netとAccessとの親和性の問題になるのか…?
そうなると良く分からない…オレより先達の人達が見つけてくれるのを…願うしかない(orz

本当にすまんな、力になれなくて。


VB初心者  2004-10-25 10:24:15  No: 86223

ありがとうございます
明日、会社にてVB6で試してみます

今後も、わからない時には掲示しますので、その時はよろしくお願いします
m(__)m

他の方々で分かる人がいましたら、回答お願いします


raki  URL  2004-10-25 20:34:44  No: 86224

VB6 + Access で行う場合、きちんと参照設定されていますか?

Declare宣言で行う場合、DLL側にエントリポイントが必要に・・・
ってこれは置いといて、先に参照設定を行わない場合、
CreateObjectで遅延バインディングによる参照設定を行うこともできます。

また、基本ではありますが、VB6で作成されたActiveX DLLは
きちんとレジストリ登録されていますか?
これがされていないと、CreateObjectでエラーが発生しますので。

それから、.NET と Access についてですが、
できたはず、としか言えません。
まだ試してないので。


Wendy  2004-10-26 08:37:31  No: 86225

たぶん、VBからのActiveX Dll の作成は問題ないと思いますが、
AccessのVBAからの使い方が違っていると思います。

参照設定するのか、CreateObjectを使うかは、どちらでもよいのですが、
Declare宣言ではありませんね。

仮に、参照設定したとすれば、

Dim myFunc As New クラス名
 rtn = myFunc.foo("aaaaa")

というようになるわけです。だから、ユニークなクラス名をつけたほうがですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加