.net EmguCV配置系统。DllNotFoundException

368yc8dk  于 2022-12-14  发布在  .NET
关注(0)|答案(6)|浏览(205)

我正试图在EmguCV 3.1中运行LicensePlateRecognition的示例,但我总是得到错误System.DllNotFoundException,消息是“无法加载cvexterniderdll”。我正在运行Windows 7与Visual Studio 2013(计算机由我的公司提供)。
我把文件夹中的上述dll和其他一些dll复制到debug文件夹中(配置文件设置为debug模式,我尝试了x86和x64版本).在一次又一次地收到错误后,我开始怀疑是因为我的显卡驱动程序(一些Google结果表明如此).我更新了它,错误仍然存在.
经过更多的谷歌搜索,我发现依赖步行者。一个文件“ieshimsiderdll”不见了。我下载了那个文件,并把它放进调试文件夹,没有运气。
我觉得有些东西可能会有用。
正在从C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64加载打开的cv二进制文件
加载库Ex C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\opencv_ffmpeg310_64.dll失败,错误代码为87:参数不正确。
无法加载文件C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\opencv_ffmpeg310_64.dll。
加载库Ex C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\cvextern.dll失败,错误代码为87:参数不正确。
无法加载文件C:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64\cvextern.dll。
有人知道这有什么问题吗?
这个错误似乎源于

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

这是在方法中

/// <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)

我花了一整天的时间来寻找解决办法,但我真的不知道我现在能做些什么。任何帮助都是感激之情。
编辑:我也试过TlbImp,没有运气。
TlbImp:错误TI 1002:输入文件“D:\Resources\cvextern.dll”不是有效的类型库。

0pizxfdo

0pizxfdo1#

我在将项目从Emgu 3.1.0.2282升级到3.1.0.2504-r16.12时遇到类似的问题后找到了这个页面
在我的情况下,这是因为我的Win10计算机没有安装Visual C++ Redistributable for Visual Studio 2015
更具体地说,在Emgu 3.1.0.2282中,“x86”和“x64”文件夹包含msvcr120.dllmsvcp120.dll,而在3.1.0.2504中,这些文件夹现在包含vcruntime140.dllmsvcp140.dll
在变更日志或安装说明中没有提到新的依赖项,也没有迹象表明cvextern.dll因为Visual C运行时而失败-只有错误bin\Debug\x64\cvextern.dll failed with error code 126: The specified module could not be found
我不需要复制DLL文件来解决这个问题:我的bin目录只包含Emgu.CV.UIEmgu.CV.World DLL文件,加上“x86”和“x64”文件夹(每个文件夹包含4个DLL)。我提到这一点是为了引导人们远离Google将为旧版本的Emgu提供的所有建议。

w8rqjzmb

w8rqjzmb2#

从4.2版开始,NuGet中包含了所有内容,请访问:https://www.nuget.org/packages/Emgu.CV.runtime.windows/
如果选择x86或x64(而不是AnyCPU),则会部署DLL。

xnifntxz

xnifntxz3#

我也遇到过同样的问题,我写了一个基于EmguCV3.1的应用程序,在我的开发PC上运行良好,但是有一次我在没有安装任何开发工具的情况下,将一个发布版本复制到另一台PC上,我得到了错误,而测试PC系统环境是Windows 7 64 bit。
最后,我发现只需从emgucv安装目录复制所有.dll文件,如:D:\Emgu\emgucv-windesktop 3.1.0.2282\bin\x64或bin/x86到您的发布文件夹。这些dll包括cvextern.dll,msvcp120.dll,msvcr120.dll,opencvffmpeg310.dll。对于64位系统,我从bin\64文件夹复制dll。
对于您的情况,我建议您将bin\x64或bin\x86文件夹目录添加到系统路径环境中。
参考:
EmguCV官方wiki关于这个问题,但没有必要为版本3.1添加这么多dll。
并尝试检查您的配置emgucv作为维基说:
对于Version 3.0+,所需的vcrt DLL包含在“x86”和“x64”文件夹中。只要将“x86”和“x64”文件夹中的所有非托管DLL复制到可执行文件夹中,您就可以准备好了。

ddhy6vgd

ddhy6vgd4#

我发生错误是因为目标计算机上缺少C++运行时文件。它们可以是downloaded并从Microsoft安装。

drkbr07n

drkbr07n5#

我在Windows Server(Azure Cloud中)上运行时遇到的另一个问题(与cvextern未加载的症状相同)是对Windows Media Foundation的依赖性。值得注意的是,Windows Server 2012上默认不安装此功能。
1.按照in this question about MF support on 2012所述添加功能
1.使用Server 2016(系列5)(其中已安装MF)

ajsxfq5m

ajsxfq5m6#

这可以通过使用Visual Studio 2019中的Nuget包管理器安装库来解决工具〉NuGet包管理器〉包管理器控制台
您可以使用以下命令完全安装

  • 安装包Emgu.CV
  • 安装包Emgu.CV.runtime.windows

对我来说一切都很顺利。

相关问题