« DLLを読み込めないという問題 | トップページ | DLLを読み込めないという問題(3) »

2010年9月27日 (月)

DLLを読み込めないという問題(2)

昨日の続きです。そもそも何がおかしいのか、丹念にエラーメッセージを追うことにしました。

制御用PCでプログラムが吐きだした例外のメッセージは次のようなものでした。

System.DllNotFoundException: DLL 'UrgLibDll.dll' を読み込めません: このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。 (HRESULT からの例外: 0x800736B1)
   場所 UrgLib4CS.UrgLib._urg_initialize(urg_t& urg)
   場所 AIModule.Device.LaserRangeScanner..ctor()
   場所 AIModuleApp.Form1.Form1_Shown(Object sender, EventArgs e) 

(以下省略。)

プログラムのカレントディレクトリにUrgLibDll.dllを配置しているのにそのDLLを読み込めない、というのが問題点なわけです。ここでの議論から、必要なDLLが足りないとDllNotFoundExceptionが発生するということなので、昨日は「開発用PC上で」Depenency WalkerでDLLの依存関係を調べて、IESHIMS.DLLが足りないという結論に達しました。

しかし、ここに落とし穴を発見。開発用PC上でDLLの不足を探しても意味ねーじゃん? そう気づいたので、制御用PC上でDependency Walkerを実行してみました。ちなみに、ここから手に入ります

その結果、次のDLLが見つからないことがわかりました。

ここで注目すべきは、MSVCR80D.DLLです。”D”が入っていますね。これはUrgLibDll.dllがDebugモードでビルドされたことを示しています。Relseaseモードでビルドしたらうまく動かなかったのは昨日の日記に書いたとおりです。デバッグ用のMSVCR80D.DLLを必要としているのであれば、VC++ 2005の再配布可能パッケージをインストールしても動かないのは納得できます。

ちなみに、EFSADU.DLLはNTFSのファイル暗号化に関するDLLのようです。IESHIMS.DLLとWER.DLLは、インターネットで検索するとその二つのファイルが見つからないという書き込みが山ほどでてきます。

上記を踏まえて試してみるべきこと。

  1. UrgLibDll.dllをReleaseモードでちゃんと動くようにする。(Releaseモードで動けば、依存関係がMSVCR80D.DLLからMSVCR80.DLLになるはず。)
  2. 制御用PCにVisual Studio 2005を入れる。

後者のほうが手っ取り早いかな。

« DLLを読み込めないという問題 | トップページ | DLLを読み込めないという問題(3) »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/167990/49581487

この記事へのトラックバック一覧です: DLLを読み込めないという問題(2):

« DLLを読み込めないという問題 | トップページ | DLLを読み込めないという問題(3) »

最近の写真