スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

EEFileLoadExceptionの起きる理由と回避方法

.NET FrameWorkでちょっとこったモノを組み始めるとこれがでてこまることがあります。

Visual Studio ではログに"EEFileLoadException"と発生したモジュール名、アドレスなどが表示されるだけで具体的なエラー箇所が表示されないため解読に難儀します。

いくつかのサイトが解説していて、個々の事象は解決しているけれど複数の例を挙げている例はあまりみかけませんね。このExceptionが起こる理由と対応策をあげておきます。

EEFileLoadExceptionは.NET FrameWorkのプログラムを複数のプロジェクト(複数のDLL)で構成したソリューションで起こるものです。

目的のDLLが存在するにもかかわらずロードできないというときに発生します。


  • アーキテクチャの異なるDLLを読もうとしている
    x86でx64のDLLを読もうとしていたり、x64でx86のDLLを読もうとしている場合など。これはあまりありませんね。

  • アライメントが異なるDLLを読もうとしている。
    規定で統一しておくのが良いでしょうね。食い違っているとこのExceptionになります。

  • dll中で呼び出すdllが存在しない。または読めない。
    ターゲットのDLLがさらに別のDLLを読み出しているときにその対象がないときなど。

  • OSや環境の対応していない命令を呼び出している
    たとえばDirextX 9exの機能を呼び出しているC++/CLIモジュールをWindows XPで呼び出す場合など。
    これコンパイルは通りますが呼び出しできません。プログラム中で if 文 OS(Windows)のバージョンチェックして分岐させていてもローダーのチェックで引っかかり EEFileLoadExceptionとなります。(もちろん#ifdefなら大丈夫ですが...)

    この場合は対象のDLLを遅延ロードに設定してあげれっばローダーのチェックで引っかからなくなるため EELoadFileExceptionは起きなくなります。


以上。私が調べた限り

comment

承認待ちコメント

このコメントは管理者の承認待ちです

comment form

管理者にだけメッセージを送る

プロフィール
Author:HiGEO



当ブログはリンクフリーです。

最近の記事
最近のコメント
月別アーカイブ
レノボ eクーポンなど
カテゴリ
スポンサー
RSSフィード
リンク
あわせて読みたい
あわせて読みたいブログパーツ
ブログ内検索
問い合わせ
管理人への問い合わせはこちら
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。