gpt4 book ai didi

德尔福/Tesseract OCR : Can somebody help me get this new DLL working in Delphi?

转载 作者:行者123 更新时间:2023-12-03 15:44:03 41 4
gpt4 key购买 nike

Google 一直在开发这个很棒的开源 OCR 组件: http://code.google.com/p/tesseract-ocr/

他们于 2010 年 10 月初发布了新版本(版本 3)。

但是这个新版本不再有一个可用的 C 包装器,而需要由 Delphi 社区中的某个人让它在 Delphi 内部工作——我正在尝试这样做,因为我非常需要它,而其他人都没有急于做这件事,但我不知道在 DLL 和将 C 转换为 Delphi 方面我在做什么。这就是我需要你帮助的地方。

我得到的线索是,我需要 Dependency Walker 以某种方式防止“名称修改”(不知道这意味着什么)。实际的 DLL API 方法位于 C 文件中 - 并且您在 Dependency-Walker 中看到的 DLL 函数名称可能与 API 文件中的函数匹配。

以下是您需要帮助的一切:您将需要一个包含 tessdll.dll 的文件夹,并且 leptonlib.dll 也只需要在那里。您需要一个名为“tessdata”的子文件夹,该文件夹内将是您的“语言数据文件” - [查看网站上的下载页面]

这是 Windows 安装程序,以便您可以查看正在运行的 DLL:[查看网站上的下载页面]

要使其适用于 Delphi,您需要将可执行文件与 DLL 放在同一文件夹中。然后,您需要知道在 DLL 中调用什么,为此您可以查看 C 源文件:[查看网站下载页面上的源文件]

感谢您的帮助。

最佳答案

乍一看这可能很困难。由于 API 明显封装在 C++ 类中,唯一干净的方法是:

用 C 语言实现一个包装器 DLL,公开该类的扁平化接口(interface),以便您可以编写一个 Delphi 单元来使用它。

原理概述如下:

http://rvelthuis.de/articles/articles-cppobjs.html

直接使用 C++ API 需要一些巧妙的汇编程序技巧。这里不仅存在名称修改的问题,而且还存在用于创建 DLL 的 C++ 编译器(即 Visual Studio 2008 Express)的调用约定。

所以有人必须首先使用 Visual C++ 2008 Express 编写带有 C API 的 DLL。

关于您的评论的一些澄清:

当您想在应用程序中使用外部库时,您需要知道需要导入哪些符号。

kernel32.dll 中的正常符号是“SetDllDirectory”。在 Delphi 中导入它没有问题,但 C++ 通常使用更人为的方式来命名其符号。例如“_ZN·9wikipedia·7article·6format·E”(摘自本文:http://en.wikipedia.org/wiki/Name_mangling)

虽然可以导入损坏的符号,但这只是问题的一小部分。

您可以使用 extern "C"{ 指令告诉 C++ 编译器不要使用名称修饰。

至少还存在两个问题:

  • 您没有方法从 Delphi 确定 C++ 对象实例的大小
  • C++ 对象的所有方法都采用隐藏的 this 参数(如 Delphi 中的 Self)

可以通过编写包装器来规避这些问题,如 Rudy 的文章中所述。

您必须编写一个简单的 C++ Dll,它导出普通的 C API(无需修改并使用普通的 C 函数),在伪代码中它看起来像这样:

extern "C" {

void* MakeAnInstanceOfDesiredClass(void)
{
return new DesiredClass();
}

void DestroyInstanceOfDesiredClass(void* instance)
{
delete instance;
}

int SomeMethodOfDesiredClass(void* instance)
{
return reinterpret_cast<DesiredClass*>(instance)->SomeMethod();
}

}

我想尝试一下,但我的互联网连接速度很慢,而且我这里没有 Visual Studio,抱歉。

关于德尔福/Tesseract OCR : Can somebody help me get this new DLL working in Delphi?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053157/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com