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.
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.