未找到本机 DLL

Native DLL Not found

我有一个使用 Tesseract 从图像中提取文本的程序。我通过 P/Invoke 创建了一个在 C# 中使用的本机 C++ DLL。我的 C# 应用程序是基于 x64 的控制台,DLL 也是 64 位的。

部署到 Windows 服务器后,我收到一条错误消息,提示 DLL(我创建的)不存在。错误信息如下。

System.DllNotFoundException: Unable to load DLL 'TesseractX64.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) at Utilities.Finance.PDFParser.PDF.OCRObject.GetUTF8Text(String path, String lang, String imgPath)

我确定该 DLL 存在于该路径中。 TesseractX64.DLL 与 C# 应用程序位于同一文件夹中,因此它应该可以正常工作。

这是我的代码:

[HandleProcessCorruptedStateExceptions]
[DllImport(@"TesseractX64.dll", EntryPoint = "GetUTF8Text", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr GetUTF8Text(string path, string lang, string imgPath);

到目前为止我尝试过的:

  1. 将 DLLImport 路径设置为相对路径,例如 C:\DLL\Tesseract.DLL。还是一样的问题。
  2. 安装了 Visual C++ 2005 - 2012 x86 和 x64。还是一样的问题。

它在我用来开发程序的 Windows 7 x64 计算机上运行得非常好。

或者:

  1. 找不到 DLL,或者
  2. 找不到一个 DLL 的依赖项。

将DLL 放在与可执行文件相同的目录中,以确保可以找到它。

确保在每台需要 运行 您的软件的机器上满足所有 DLL 的依赖关系。这将涉及首先弄清楚这些依赖项是什么。 DLL 的文档应该告诉您该信息。通常这意味着安装 MSVC 运行链接 DLL 的时间。

不允许重新分发调试 运行时间。即使 .NET 代码处于调试模式,您也需要制作本机 DLL 的发布版本。