- - PR -
DLLの呼び出し失敗
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-09 16:17
C#で作成したDLLをVC++6から使用しています。
COMとして利用できるように regasm xxx.dllとして登録を行っています。 (dllには、厳密名はつけていません) そして、VC++6で作成したexeと、dllを同じフォルダに入れることで 動作していたのですが、 なぜか、作成したものを他の環境に持っていくと呼び出しに失敗します。 このような状況の原因となりうるものには何が考えられますでしょうか? 作成した環境は、VisualStudio2005 Professional、WinXP 動かない環境にも、.NET2.0はインストールしてあります。OSはWinXP,or 2000 [ メッセージ編集済み 編集者: たけ 編集日時 2006-11-09 16:25 ] | ||||||||
|
投稿日時: 2006-11-09 16:42
フルパスにしないと不味いかも。 (exeのある位置のDLLというようなものではない) よって、
この認識は間違いのような。 | ||||||||
|
投稿日時: 2006-11-09 17:44
>フルパスにしないと不味いかも。
すいません、regasm xxx.dll は、フルパスを指定しています。 >この認識は間違いのような。 http://www.sev.or.jp/ijupiter/world/dc_interrop/dotnet_com_interrop.html ↑のサイトを参考にしました。 --- 引用 --- 配布したいVB用アプリケーションのexeと同じフォルダに.NET DLLを配置してregasm.exeを実行すればいいだけ ------------ | ||||||||
|
投稿日時: 2006-11-09 19:47
なんとなーくですが、regasm.exe を開発機でだけ実行してませんか? | ||||||||
|
投稿日時: 2006-11-10 06:54
ご意見ありがとうございます!
>なんとなーくですが、regasm.exe を開発機でだけ実行してませんか? 実は、最初忘れてました。 でも、開発機以外でも同様におこなったのですが、やっぱり 呼ぶことができませんでした。 | ||||||||
|
投稿日時: 2006-11-10 11:10
実行環境で
・適切な .NET ランタイムが導入済み ・regasm し忘れていない であるなら、後は .dll ファイルのアクセス権が不正(=読み取り・実効許可が無い)くらい? てか、「呼び出しに失敗」するのは分かりましたが、その時の詳細エラーコードくらい分からないんですか? [ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2006-11-10 11:32 ] | ||||||||
|
投稿日時: 2006-11-10 12:24
>・適切な .NET ランタイムが導入済み
>・regasm し忘れていない 上記は問題ないですね。 >であるなら、後は .dll ファイルのアクセス権が不正(=読み取り・実効許可が無い)くらい? こちらは、OSのファイル毎のアクセス権のことですよね? こちらはチェックしてないです。 >てか、「呼び出しに失敗」するのは分かりましたが、その時の詳細エラーコードくらい分からないんですか? たしかに、戻り値のチェックはするのが基本ですね。 ちょっと、環境が手元にないのでまたチェックしてご報告します。 | ||||||||
|
投稿日時: 2006-11-10 13:50
そうです。 が、ファイルのアクセス権が問題になるのは、インストールを行ったのとは別のアカウントでアプリケーションを実行した場合がほとんどです。 アプリケーションの導入を行ったアカウントで実行しているなら、通常は問題になることは無いはずです。 アクセス権で言えば、.NET な .dll の内部でログファイルやイベントログの書き出しなんかをやっている場合、それが許可されていない or 事前準備不足などによって、CoCreateInstance() に失敗することもあるでしょうね。 そこまで行くと、モジュール固有の作りこみによって発生する問題なので、ソースでも見ないことには原因を特定できませんが。
CoCreateInstance() の戻り値(HRESULT)で、クラスの登録がされていない等、原因の特定につながる情報が得られることもあります。 |
1