找不到本机DLL

本文关键字:DLL 本机 找不到 | 更新日期: 2023-09-27 18:25:56

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

在部署到Windows服务器后,我收到一个错误,表明DLL(我制作的一个)不存在。错误消息如下。

System.DllNotFoundException:无法加载DLL"TesseractX64.DLL":找不到指定的模块。(HRESULT:0x8007007E中的异常),位于Utilities.Finance.PDFParser.PDF.OCRObject.GetUTF8Text(字符串路径,字符串lang,字符串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. 将DLL导入路径设置为相对路径,例如C:''DLL''Tesseract.DLL。问题仍然相同
  2. 已安装Visual C++2005-2012 x86和x64。还是同样的问题

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

找不到本机DLL

任一:

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

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

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

不允许重新分发调试运行时。即使.NET代码处于调试模式,您也需要对本机DLL进行发布构建。