5

Emgu opencv ラッパーの形式でアンマネージ ライブラリを使用する Web アプリケーション (C# .NET) を構築しています。ビルドを強制的に 32 ビット (x86) にし、32 ビット バージョンの Emgu を使用しています。

これはすべてローカル ビルドでは問題なく動作しますが、Web サーバーに公開すると、openCV Dll(s) の読み込みに失敗します。

System.DllNotFoundException
Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

System.TypeInitializationException: The type initializer for 'Emgu.CV.CvInvoke' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'opencv_core240': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)
   at Emgu.CV.CvInvoke..cctor()
   --- End of inner exception stack trace ---
   at Emgu.CV.CvInvoke.cvCreateImageHeader(Size size, IPL_DEPTH depth, Int32 channels)
   at Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols, Int32 numberOfChannels)
   at Emgu.CV.Image`2.set_Bitmap(Bitmap value)
   at Emgu.CV.Image`2..ctor(Bitmap bmp)

stackoverflow やその他のソースで見つけた次のことを試しました。

  • 管理されていない Opencv Dll を別のディレクトリに置き、このディレクトリへのパスをパス環境変数に入れ、Web サービスを再起動します。
  • サーバー構成でアンマネージ コードの実行が許可されているかどうかをテストしました (はい)。
  • 管理されていない Opencv Dll を system32\inetsrv および SysWOW64\inetsrv ディレクトリに配置する
  • 管理されていないOpencv Dllを、前述のフォルダーのサブディレクトリ「x86」に配置します

私はこれを理解しています: http://msdn.microsoft.com/en-us/library/ms366723.aspx

これがすべての問題の原因ですが、path 変数を編集して Dll を含む正しいパスを含めても何も解決しない理由がわかりません。

この問題に関する最後の有用な投稿は 2008 年でしたが、誰にでもできる解決策はまだ提供されていません。

4

5 に答える 5

2

opencv_core240.dll はこれに依存しているため、tbb.dll もパスにあることを確認してください。tbb.dll は opencv/build/common/tbb にあります。

于 2012-07-26T14:02:23.410 に答える
1

私の場合、「npp32_xx_x.dll」(xx_xはバージョン番号、32は32ビットアーキテクチャ)で問題が解決しました。したがって、このdllをプロジェクトの出力フォルダーに配置して、Winアプリ用のフォルダーと同等のフォルダーをWebアプリに配置してみてください。dllはNvidiaCudaNPPライブラリです。

于 2012-08-13T14:34:26.427 に答える
0

エラーの説明と既に実行したチェックから、MSVCRT がインストールされていないようです。

于 2012-06-07T12:10:12.540 に答える
0

私は数日前に同じ問題に直面し、私の知る限りすべてを試しましたが、問題の解決には何も役立ちませんでした. EmguCV は、ローカルの 64 ビット Windows 8 PC では正常に動作しますが、サーバー (Windows Web Server 64 ビット) では正常に動作します。

しかし、次のように本当にランダムな作業を行った後、問題は修正されました。サーバーにはVisual C++ 2008ランタイムが以前にインストールされていますが、再び

  1. インストールしVisual C++ 2010 x86ました。
  2. 修理済み Visual C++ 2008 x86 Runtime installation

そしてそれは問題を修正しました。どうしてこうなったのかは説明できませんが、2 日間のランダムな実験の末に問題が解決したことをうれしく思います。

于 2012-08-08T23:03:40.507 に答える