C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: DLL - HRESULT からの例外 0x8007007E


(過去ログ 12 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■3376 / inTopicNo.1)  DLL - HRESULT からの例外 0x8007007E
  
□投稿者/ sato (1回)-(2007/05/08(Tue) 19:25:03)

分類:[C# (Windows)] 

はじめまして sato と申します。

【 開発環境 】
Windows 2000 SP4
VC# 2005 Express Edition
VC++ 2005 Express Edition

VC++ により Win32 ベースのネイティブな DLL を作成し、それを C# で作成したアプリケーションから
DllImport により、Win32API を呼び出すのと同じ要領で使用しています。
その際、開発環境で動作確認する限りでは、問題なく動作するのですが、開発環境以外の環境 ( Windows 2000 )
で動作させると、DLL に記述した関数を呼び出す段階で、例外 DllNotFoundException が発生してしまいます。
エラーの内容は以下のとおりです。

DLL '( DLL 名 )' を読み込めません: 指定されたモジュールが見つかりません。
(HRESULT からの例外: 0x8007007E)

DLL は、呼び出す側の EXE ファイルと同一のフォルダに置いています。
私の方で色々と調べた限りでは、各実行環境にも、Microsoft .NET Framework 2.0 SDK 日本語版、を
インストールすると、このエラーは発生しなくなります。
しかし実行環境に SDK のインストールを要求するというのも、いかがなものかと感じます。この問題の
解決策について、何かご存知の方がおられましたら、何卒よろしくお願いいたします。
引用返信 編集キー/
■3377 / inTopicNo.2)  Re[1]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ ぽぴ王子 (193回)-(2007/05/08(Tue) 19:40:18)
ぽぴ王子 さんの Web サイト
No3376 (sato さん) に返信

直接の関係はわかりませんが "0x8007007E" で検索してみたところ、こんなのが
ひっかかりました。
http://support.microsoft.com/kb/834411/ja

SDK をインストールしたことによってシステムファイルが最新バージョンに置き換わっ
ているために正常に動作するのではないでしょうか。
引用返信 編集キー/
■3379 / inTopicNo.3)  Re[1]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ 渋木宏明(ひどり) (200回)-(2007/05/08(Tue) 20:41:31)
渋木宏明(ひどり) さんの Web サイト
> その際、開発環境で動作確認する限りでは、問題なく動作するのですが、開発環境以外の環境 ( Windows 2000 )
> で動作させると、DLL に記述した関数を呼び出す段階で、例外 DllNotFoundException が発生してしまいます。

そのDLLが必要とする別のDLLが実行環境に存在しないんじゃないでしょうか。

> 私の方で色々と調べた限りでは、各実行環境にも、Microsoft .NET Framework 2.0 SDK 日本語版、を
> インストールすると、このエラーは発生しなくなります。

たまたま「そのDLLが必要とする別のDLL」が含まれていたんでしょう。

>しかし実行環境に SDK のインストールを要求するというのも、いかがなものかと感じます。この問題の
>解決策について、何かご存知の方がおられましたら、何卒よろしくお願いいたします。

解決方法は、問題のDLLが必要とする別のDLLを配布パッケージに含める、などです。
引用返信 編集キー/
■3388 / inTopicNo.4)  Re[2]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ sato (2回)-(2007/05/09(Wed) 00:32:55)

No3379 (渋木宏明(ひどり) さん) に返信
> そのDLLが必要とする別のDLLが実行環境に存在しないんじゃないでしょうか。

MessageBox() API を呼び出すだけの関数を1つだけ記述した DLL を試作し、動作を
確認したところ、やはり同様のエラーが確認されました。従って、ご指摘の点が原因
である可能性は低いものと考えております。


引用返信 編集キー/
■3389 / inTopicNo.5)  Re[3]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ Blue (301回)-(2007/05/09(Wed) 00:53:39)
2007/05/09(Wed) 00:56:22 編集(投稿者)

渋木宏明さんがおっしゃっているのは、DLLを呼び出す環境が整っていない
ってことでしょう。

つまり、Visual C++ ライブラリのランタイム コンポーネントが必要なのでは?ってことです。
これは、DLLでないもっと簡単なC++のプログラムを実行しようとしても発生すること
で確認できるはずです。

参考スレ
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1504421&SiteID=7



ちなみに、VC2005ではなくそれ以前のVCで作成したDLLとか(2002,2003はわからない)
では問題なく動いてくれるんじゃないかなぁと。
引用返信 編集キー/
■3390 / inTopicNo.6)  Re[3]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ 渋木宏明(ひどり) (201回)-(2007/05/09(Wed) 02:32:33)
渋木宏明(ひどり) さんの Web サイト
2007/05/09(Wed) 09:01:56 編集(投稿者)

> MessageBox() API を呼び出すだけの関数を1つだけ記述した DLL を試作し、動作を
> 確認したところ、やはり同様のエラーが確認されました。従って、ご指摘の点が原因
> である可能性は低いものと考えております。

それくらいじゃ、検証したことにはなりません。

VC++ のプロジェクト設定を確認するのが本道ですが、設定を見ても分からないようなら Dumpbin や Dependency Walker などのツールで客観的に依存関係を確認してください。

引用返信 編集キー/
■3394 / inTopicNo.7)  Re[4]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ sato (3回)-(2007/05/09(Wed) 10:51:01)
No3390 (渋木宏明(ひどり) さん) に返信

> VC++ のプロジェクト設定を確認するのが本道ですが、設定を見ても分からないようなら Dumpbin や Dependency Walker などのツールで客観的に依存関係を確認してください。

なるほど確かに。VC++ 2005 Express Edition で作成した DLL の実行には msvcr80d.dll が必要
だったようです。これが実行環境には欠けていました。
ちなみに VC++ 2003 で再コンパイルした DLL は、msvcr80d.dll がなくても正常動作を確認しました。
ありがとうございました。


解決済み
引用返信 編集キー/
■3396 / inTopicNo.8)  Re[5]: DLL - HRESULT からの例外 0x8007007E
□投稿者/ 774RR (14回)-(2007/05/09(Wed) 11:08:28)
> なるほど確かに。VC++ 2005 Express Edition で作成した DLL の実行には msvcr80d.dll が必要
> だったようです。これが実行環境には欠けていました。
d つきかよ!
そりゃ配布禁止なんで、開発環境以外に入っているわけが無い。
EULA を確認するべし。
「配布していいのは、リリースモードでコンパイル・リンクしたバイナリだけ」だよ
デバッグモードでコンパイル・リンクしたバイナリは開発環境でのみ使用できる。配布禁止。

> ちなみに VC++ 2003 で再コンパイルした DLL は、msvcr80d.dll がなくても正常動作を確認しました。
そりゃそうだ。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -