我有一个使用Tesseract从图像中提取文本的程序。我制作了一个Native C ++ DLL,它通过P / Invoke在C#中使用。我的C#应用程序是基于控制台的x64,DLL也是64位。
部署到Windows Server后,我收到一条错误,指出DLL(我已经创建的)不存在。错误信息如下。
System.DllNotFoundException:无法加载DLL' TesseractX64.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)在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);
到目前为止我尝试过:
它在我用于开发程序的Windows 7 x64计算机上完美运行。
答案 0 :(得分:6)
或者:
将DLL放在与可执行文件相同的目录中,以确保可以找到它。
确保在需要运行软件的每台计算机上满足所有DLL的依赖关系。这将涉及首先弄清楚这些依赖关系是什么。 DLL的文档应该告诉您该信息。通常,这意味着安装与DLL链接的MSVC运行时。
不允许重新分发调试运行时。即使.NET代码处于调试模式,您也希望生成本机DLL的发布版本。