【发布时间】:2015-12-07 17:06:19
【问题描述】:
我有一个使用 Tesseract 从图像中提取文本的程序。我通过 P/Invoke 制作了一个用于 C# 的 Native C++ DLL。我的 C# 应用程序是基于 x64 的控制台,并且 DLL 也是 64 位的。
部署到 Windows Server 后,我收到一个错误,提示 DLL(我制作的)不存在。错误信息如下。
System.DllNotFoundException:无法加载 DLL 'TesseractX64.dll':找不到指定的模块。 (来自 HRESULT 的异常:0x8007007E)在 Utilities.Finance.PDFParser.PDF.OCRObject.GetUTF8Text(字符串路径,字符串语言,字符串 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);
到目前为止我所尝试的:
- 将 DLLImport 路径设置为相对路径,例如 C:\DLL\Tesseract.DLL。还是同样的问题。
- 安装了 Visual C++ 2005 - 2012 x86 和 x64。还是同样的问题。
它在我用来开发程序的 Windows 7 x64 计算机上运行良好。
【问题讨论】:
-
检查您的基础目录是否与您启动应用程序的位置相同。
-
消息显示
unable to load。这并不一定意味着 .dll 不存在,但可能无法加载它,因为它依赖于其他无法找到的 .dll。 -
@dxiv:感谢您指出这一点。我去看看。