EmguCV cvextern System.DllNotFoundException

2019-01-28 01:18发布

I am trying to run the example of LicensePlateRecognition in EmguCV 3.1. But I always get the error System.DllNotFoundException and the message is that "cvextern.dll cannot be loaded". I am running Windows 7 with Visual Studio 2013 (the computer is provided by my company).

I copied the said dll and some other dlls in the folder to the debug folder (the profile is set to debug mode, and I tried both x86 and x64 versions). After getting the error again and again I started to suspect that it's because of my video card driver (some Google results suggested so). I updated that and the error persisted.

After some more Googling, I found the Dependency Walker. One file "IEShims.dll" is missing. I downloaded that and put it into the debug folder with no luck.

Some output I think might be relevant.

Loading open cv binary from C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64

LoadLibraryEx C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\opencv_ffmpeg310_64.dll failed with error code 87: The parameter is incorrect.

File C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\opencv_ffmpeg310_64.dll cannot be loaded.

LoadLibraryEx C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\cvextern.dll failed with error code 87: The parameter is incorrect.

File C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\cvextern.dll cannot be loaded.

Does anyone know what's wrong with that?

The error seems to be stemmed from

#if !UNITY_IPHONE
     //Use the custom error handler
     RedirectError(CvErrorHandlerThrowException, IntPtr.Zero, IntPtr.Zero);
#endif

Which is in the method

  /// <summary>
  /// Attempts to load opencv modules from the specific location
  /// </summary>
  /// <param name="modules">The names of opencv modules. e.g. "opencv_cxcore.dll" on windows.</param>
  /// <returns>True if all the modules has been loaded successfully</returns>
  public static bool DefaultLoadUnmanagedModules(String[] modules)

I tried a whole day to find the solution but I really don't know what I can do now. Any help is appreciated.

EDIT: I also tried TlbImp with no luck.

TlbImp : error TI1002 : The input file 'D:\Resources\cvextern.dll' is not a valid type library.

标签: .net dll emgucv
4条回答
聊天终结者
2楼-- · 2019-01-28 01:25

I met the same problem as you. I wrote an application based on EmguCV3.1. It works well on my development PC, but once I copied a release version to another PC without installing any development tools, I got the error. And the test PC system environment is Windows 7 64bit.

Finally, I found that just copy all .dll files from your emgucv install dir such as: D:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64 or bin/x86 to your release folder. These dll include cvextern.dll, msvcp120.dll, msvcr120.dll, opencvffmpeg310.dll. For 64bit system I copy the dlls from bin\64 folder.

For your situation, I advise you add the bin\x64 or bin\x86 folder dir to the system path environment.

Reference:

EmguCV official wiki about this problem But thers is no necessary to add so much dll for version 3.1.

And Try to check your configuration of emgucv as wiki said:

For Version 3.0+, the required vcrt dlls are included in the "x86" and "x64" folder. You will be ready as long as you copy all the unmanaged dlls in the "x86" and "x64" folder to the folder of executable.

查看更多
神经病院院长
3楼-- · 2019-01-28 01:36

Another issue I encountered (with the same symptom as cvextern not loading) running on Windows Server (in Azure Cloud) was a dependency on Windows Media Foundation. For what it's worth, this is not installed by default on Windows Server 2012. There are a couple remedies:

  1. Add the feature as described in this question about MF support on 2012
  2. Use Server 2016 (Family 5) (where MF is already installed)
查看更多
成全新的幸福
4楼-- · 2019-01-28 01:37

The error occurred for me because of missing C++ runtime files on the target machine. They can be downloaded and installed from Microsoft.

查看更多
一纸荒年 Trace。
5楼-- · 2019-01-28 01:43

I found this page after encountering a similar problem when upgrading a project from Emgu 3.1.0.2282 to 3.1.0.2504-r16.12

In my case it was because my Win10 computer did not have Visual C++ Redistributable for Visual Studio 2015 installed.

More specifically, in Emgu 3.1.0.2282 the "x86" and "x64" folders contained msvcr120.dll and msvcp120.dll, while in 3.1.0.2504 those folders now contain vcruntime140.dll and msvcp140.dll.

The new dependency isn't mentioned in the changelog or installation instructions, and there was no indication that cvextern.dll was failing because of the visual C runtime - only the error bin\Debug\x64\cvextern.dll failed with error code 126: The specified module could not be found

I've not needed to copy DLL files around to fix this: my bin directory contains only the Emgu.CV.UI and Emgu.CV.World DLL files, plus the "x86" and "x64" folders (containing 4 DLLs each). I mention this to steer people away from all the advice Google will pull up which was intended for older versions of Emgu.

查看更多
登录 后发表回答