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


VB初心者  2004-10-24 01:49:11  No: 86216  IP: [192.*.*.*]

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

編集 削除
ガッ  2004-10-24 04:37:34  No: 86217  IP: [192.*.*.*]

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-24 23:24:50  No: 86218  IP: [192.*.*.*]

ガッさん、ありがとうございます
しかし、まだうまくいきません
環境なんですが、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-24 23:59:50  No: 86219  IP: [192.*.*.*]

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

編集 削除
VB初心者  2004-10-25 00:32:57  No: 86220  IP: [192.*.*.*]

すみません

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

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

編集 削除
ガッ  2004-10-25 01:04:50  No: 86221  IP: [192.*.*.*]

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

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

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

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

編集 削除
ガッ  2004-10-25 01:07:36  No: 86222  IP: [192.*.*.*]

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

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

編集 削除
VB初心者  2004-10-25 01:24:15  No: 86223  IP: [192.*.*.*]

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

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

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

編集 削除
raki  URL  2004-10-25 11:34:44  No: 86224  IP: [192.*.*.*]

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

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

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

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

編集 削除
Wendy  2004-10-25 23:37:31  No: 86225  IP: [192.*.*.*]

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

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

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

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

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

編集 削除