VB.NET2003で作成したDLLをAccessで実行

解決


クマノミ  2005-03-10 16:59:17  No: 120162  IP: [192.*.*.*]

VB.NET2003で作成したDLLファイルをAccessのVBAで
実行させようとするとエラーが出てしまいます。
例えばVB.NET2003のクラスライブラリ作成で作成したクラスに

Public Class TEST
    Public Function TEST()
        MsgBox("表示")
    End Function
End Class

と記述してからメニューの
ビルド→ソリューションのビルド
でDLLを作成し、AccessのVBAで作成したフォームに

Option Compare Database
Private Declare Function TEST Lib "※DLLファイルへのパス" ()
Private Sub コマンド0_click()
    call TEST
End Sub

と記述してからフォームのボタンを押して作成したDLLを実行させようとすると、

実行エラー:453
エントリ TEST がDLLファイル "※DLLファイルへのパス"内に見つかりません

というエラーが出てしまい、DLLが実行できません。
ネットでいろいろ調べたりしましたが、全く解決できずに困り果てています。
どうかよろしくお願いします。

ちなみに開発環境は下記のとおりです。
OS:WindowsXP Pro
開発ソフト VB.NET2003
           Access2003

編集 削除
魔界の仮面弁士  2005-03-10 18:06:42  No: 120163  IP: [192.*.*.*]

あー…… Declareで使いたいのですか。それは難しいかと。

VB.NET製DLLを Declareするのではなく、参照設定して使える「ActiveX DLL」として利用してみては如何でしょう?
http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html

どうしても Declare で運用したいとなると、VB6 や VB.NET、C# などでは、かなり特殊なことをやらないと関数のエクスポートができないようですから、DLL を別の言語(Managed C++ など)で作り直された方が早道かと。

編集 削除
クマノミ  2005-03-11 11:06:53  No: 120164  IP: [192.*.*.*]

魔界の仮面弁士さん、アドバイスありがとうございます。
とりあえずActiveX DLLとして利用することにしてみたんですが、
DLLをレジストリに登録して、タイプライブラリを作成後にVBAから
参照することはできたんですが、実行すると

ファイルまたはアセンブリTEST、
またはその依存関係の1つが見つかりませんでした。

というエラーが出てしまい、うまく動作しません。
ちなみにDLLファイルはAccessのldbファイルがあるのと同じフォルダに保存しています。
なお、VB.NET2003の記述内容は同じで、AccessのVBAは下記のように記述しました。

Option Compare Database
Private Sub コマンド0_click()
On Error GoTo Err_Proc
    Dim obj As Test.Test
    Set obj = New Test.Test
    Call obj.Test
    Exit Sub
Err_Proc:
    MsgBox Err.Description
End Sub

編集 削除
クマノミ  2005-03-11 13:47:27  No: 120165  IP: [192.*.*.*]

自己解決できました。
DLLファイル(今回の場合はTEST.DLL)を
Access本体の実行ファイルのあるフォルダ
※(私の場合は 「C:\Program Files\Microsoft Office\2003\OFFICE11」)
へ移動させることで無事DLLファイルの実行が可能でした。

編集 削除