- PR -

実行時に参照設定したdllが見つからない

1
投稿者投稿内容
タンク
会議室デビュー日: 2003/02/05
投稿数: 18
お住まい・勤務地: 神戸
投稿日時: 2006-05-11 19:34
VB.NETでWindowsアプリケーションを作成していますが参照設定を行ったdllが実行時に見つからないというエラーが発生します
詳細な設定手順と現象は以下になりますが、解決方法はないでしょうか?

設定手順と現象
1.COMとして提供されたdllをregsvr32にてシステムに登録する。
2.「参照設定」-「参照の追加」より参照の追加ダイアログを表示させ
COMのタブを選択し対象となるコンポーネントを選択し追加する。
3.参照追加したコンポーネントのInteropが作成される。
(型はActiveX、ローカルコピーはTrue、パスはInteropの作成されたパス)
4.コードから参照追加したコンポーネントは利用可能で
コンパイルも問題なく実行可能。コンポーネントを
オブジェクトブラウザにて表示させるとクラスやメソッド、メンバが
確認できる。
5.デバッグ実行を行うとコンポーネントのクラスを利用している箇所にて
System.IO.FileNotFoundExceptionが発生し
「指定されたモジュールが見つかりません。」となる。


システムに登録せずに、参照追加時に[参照]ボタンから
直接dllを選択し参照追加した場合も実装時は何の問題も無く
実行時にエラーとなります。エラーは
System.Runtime.InteropServices.COMExceptionが発生し
「CLSID '{XXXXXX-XXXXX-XXXX-XXXX-109D533B6575}' の
COM オブジェクトは有効でないか、登録されていません。」と
なります。



[ メッセージ編集済み 編集者: タンク 編集日時 2006-05-11 19:35 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-11 19:39
CLSID が書かれていないので皆目検討がつきませんでしたが、どんな COM なんでしょう?
それとも、「COM として提供された dll」は、自作のものなんでしょうか?
だとしたら、何でどうやって作られたものですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
タンク
会議室デビュー日: 2003/02/05
投稿数: 18
お住まい・勤務地: 神戸
投稿日時: 2006-05-11 19:50
dllは自作ではなく他から提供されたものです。
VCで作られていて別のシステムにアクセスするための物となります。
中の作りは把握できていない状態です。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-05-12 00:08
引用:

タンクさんの書き込み (2006-05-11 19:50) より:
dllは自作ではなく他から提供されたものです。
VCで作られていて別のシステムにアクセスするための物となります。
中の作りは把握できていない状態です。



ぢゃあVB.NETとは関係なく。
#私は.NETはよくわかってません。

DLLの依存関係を知りたいなら、Platform SDKのToolにあるdepends.exe
(Dependancy Walker)を使えば、DLLがどのDLLで出来てるか分かります。
タンク
会議室デビュー日: 2003/02/05
投稿数: 18
お住まい・勤務地: 神戸
投稿日時: 2006-05-15 17:07
[解決]
Dependency Walkerで確認してみたところ、MSJAVA.dllへのパスが見つからないとのことで
MSJAVA.dllをsystem32に配置して依存関係に問題が無い事を確認して、再度試してみましたが、結果は変わらず「指定されたモジュールは見つかりません」でした。
しかし勉強になりました。ありがとうございます。

原因はdllをregsvr32にてシステムに登録する際に実行する場所のパスに日本語が含まれている事が原因でした。
一度システムから削除して日本語を含まないパスでシステムに登録したら正常に動作しました。
システムに登録する時に実行するパスに日本語が含まれているとマズイとは知りませんでした。。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-15 17:12
引用:

タンクさんの書き込み (2006-05-15 17:07) より:

原因はdllをregsvr32にてシステムに登録する際に実行する場所のパスに日本語が含まれている事が原因でした。
一度システムから削除して日本語を含まないパスでシステムに登録したら正常に動作しました。
システムに登録する時に実行するパスに日本語が含まれているとマズイとは知りませんでした。。。


普通は、%WinDir%\System32 に配置するので、マルチバイト文字は含まないですよね。
Program Files 内のアプリケーション フォルダに登録したい場合は、マルチバイト文字はありえますね...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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