- PR -

VB.NET2003で作成したDLLをACCESS2003で利用する方法

1
投稿者投稿内容
jemini_777
会議室デビュー日: 2003/12/05
投稿数: 17
投稿日時: 2004-11-08 20:58
お世話になってます。
表題のとおり「VB.NET2003で作成したDLLをACCESS2003で利用する方法」
なのですが、困っていることがあります。

<内容>
VB.NETのプロジェクトプロパティから、構成プロパティを選択しソリューションのビルドをクリックし、COMの相互運用機能をオンにし、リビルドします。
できたtblファイルをaccess2003から参照し利用することは可能なのですが、それはVisualStudio.netが入っているPCでのみ可能であり、入っていないPCでは「ファイルまたはアセンブリ名ClassLibraly1、またはその依存関係の1つがみつかりませんでした。」というエラーがでてしまいうまくいきません。
もちろんクライアントには.NETFrameworkは入っています。(1.1sp1)

どうしてもわかりません、どうかご教授お願いいたします。

<環境>
クライアント
OS:WindowsXPSP2 .NETFramework1.1sp1
ACCESS2003

dll作成マシンはVisualStudio.net2003です。


Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-08 23:21
諸農です。

ターゲットマシンでRegasmを行う必要があるのではないでしょうか。
SDKの「COM への .NET Framework コンポーネントの公開」のうちの
「COM へのアセンブリの登録」が参考になると思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
jemini_777
会議室デビュー日: 2003/12/05
投稿数: 17
投稿日時: 2004-11-08 23:42
早速のレスありがとうございます。
記述し忘れていましたが、VisualStudio.netの入っていないPCでは、
RegAsmを実行→tblファイルを作成
そのファイルを使用しております。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-11-09 08:44
引用:

記述し忘れていましたが、VisualStudio.netの入っていないPCでは、
RegAsmを実行→tblファイルを作成
そのファイルを使用しております。



紹介されたドキュメントをちゃんと読んでみてください。

.tlb ファイルは .dll に収められたプログラムの型情報が書かれているだけのファイルで、実行の主体ではありません。

実行の主体は .dll なので、

・実行環境に .dll をコピーする。
・実行環境で .dll を regasm する。(おそらく /codebase オプションも必要)

という操作が必要です。

ただし、regasm は .NET の Runtime 版には付属していなかったはずなので、↑と同等の操作を開発環境がインストールされていないPCで実行するためには、インストーラを作らなければならないかもしれません。


_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
jemini_777
会議室デビュー日: 2003/12/05
投稿数: 17
投稿日時: 2004-11-09 10:00
お世話になります。
解決しました、RegAsm等を使わずに、DLL専用のセットアップEXEを作成し
VS2003の入っていないPCでセットアップ。
この手順で無事、DLLの使用ができました。

どうもありがとうございます。
ryo
会議室デビュー日: 2004/09/20
投稿数: 4
投稿日時: 2004-11-10 01:01
解決済みとのことですが、追加情報としまして。

引用:


VB.NETのプロジェクトプロパティから、構成プロパティを選択しソリューションのビルドをクリックし、COMの相互運用機能をオンにし、リビルドします。




上記はあくまでも該当の開発端末において、ビルドのタイミングで自動的にCOM相互運用のための一連の登録作業が行われるだけで、クライアントへの配置時には別途これら登録作業を行ってあげる必要があります。(regasmによる登録 => @.tlbの生成、登録、ACOM相互運用のためのレジストリ登録)

regasmツールによる登録を行えばこれらが実行されます。regasmツールで/regfileオプションを指定するとレジストリファイルが作成されますが、これで登録できるのはA部分だけだったように思います。

ここから本題ですが、
Accessから.NETアセンブリを使用する場合、Accessの実行ファイル本体が呼び出し元のアプリケーションになると思います。(Microsoft Office\Office11\MSACCESS.EXE)ここが.NETのCLRから見たアプリケーションのベースディレクトリとなります。

従って、あとは通常の.NETアプリの場合と同様ですが、regasmで.tlbの登録が済んでいるとして、参照したいアセンブリがGAC登録されていれば、これで動作可能な状態にあります。もしGAC登録してない場合には、上記ベースディレクトリからCLRが検索可能な位置にアセンブリを配置してあげる必要があります。
→ 今回の場合でいうと、実行の主体である.dllファイルをこの同一フォルダに配置してあげれば動作すると思います。

このように書いたのは、通常Officeソフトのようなアンマネージな共有アプリに対して構成ファイルを配置しcodebase要素やprobingを設定することはないと考えるからです。

また、そのようなことをしなくとも、こうしたフォルダに自作アセンブリを配置したくない場合には、すでに紹介があった通りregasmツールによる登録時にcodebase指定で該当アセンブリのパス情報を登録してあげれば、アセンブリ自体は任意の場所に配置することが可能です。

こうした点を抑えておけば手動による設定にも困らないと思います。

引用:


ただし、regasm は .NET の Runtime 版には付属していなかったはずなので、↑と同等の操作を開発環境がインストールされていないPCで実行するためには、インストーラを作らなければならないかもしれません。




regasmはランタイムにも付属されているはず、ですが・・。(違いますか?)

レジストリの共有領域などに書き込みを行うので、通常のユーザー権限では行えずインストールプロセスで行うことにはなると思いますが。
1

スキルアップ/キャリアアップ(JOB@IT)