未找到本机DLL

时间:2015-12-07 17:06:19

标签: c# c++ pinvoke

我有一个使用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);

到目前为止我尝试过:

  1. 将DLLImport路径设置为相对路径,例如C:\ DLL \ Tesseract.DLL。还是同样的问题。
  2. 安装了Visual C ++ 2005 - 2012 x86和x64。还是一样的问题。
  3. 它在我用于开发程序的Windows 7 x64计算机上完美运行。

1 个答案:

答案 0 :(得分:6)

或者:

  1. 找不到DLL,或
  2. 找不到其中一个DLL的依赖项。
  3. 将DLL放在与可执行文件相同的目录中,以确保可以找到它。

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

    不允许重新分发调试运行时。即使.NET代码处于调试模式,您也希望生成本机DLL的发布版本。