【问题标题】:How to use Delphi compiled DLL in TCL?如何在TCL中使用Delphi编译的DLL?
【发布时间】:2013-12-23 12:44:13
【问题描述】:

我使用 Delphi 和 TCL 有一段时间了,有两个不同的目的。现在,我有一些我在 Delphi 中实现的功能。我想重用 TCL 实用程序中的功能。 TCL 程序不是一个独立的程序,它被用来在 CAD 工具中编写脚本。

这里讨论的功能与特定的 XML 解析有关,我发现 TCL 有读/写 XML 文件的包。但是,我正在考虑是否可以按原样重用整个逻辑。

我对该主题进行了 Google 搜索,但可以找到与为 TCL 创建 TCL 包装器相关的大部分帮助,但这是针对 C/C++ 的。请指导在TCL代码中调用导出的函数。

【问题讨论】:

  • 我记得 TCL 是高性能 e-Bay 网络服务器的基础。我认为它已经有一个高速 XML 处理库。
  • 是的,TCL 有 XML 库。我的意思是,我不想在 TCL 中再次编写所有逻辑(除了读取/写入 XML)。

标签: delphi dll tcl


【解决方案1】:

关于二进制互操作的问题在于,使用什么语言来创建 DLL 并不重要。为了论证起见,让我们考虑一个在 C++ 中这样声明的函数:

int __stdcall foo(double bar);

还假设此函数是从 DLL 导出的。现在考虑这个 Delphi 函数:

function foo(bar: Double): Integer; stdcall;

再一次,假设它是从 DLL 导出的。

现在,这两个 DLL 彼此无法区分,至少在它们的接口上是这样。如果你可以从 TCL 调用 C++ DLL,那么你可以调用 Delphi DLL。

所有这一切的底线是,既然您已经知道如何从 TCL 调用 C++ DLL,那么您可以使用完全相同的机制来调用 Delphi DLL。您的问题实际上是基于一个错误的前提,即 C++ DLL 需要与 Delphi DLL 不同的处理。

您可能需要的唯一额外信息是了解 C++ 和 Delphi 互操作之间的映射,为此我建议您参阅 Rudy Velthuis 的优秀文章:http://rvelthuis.de/articles/articles-convert.html

【讨论】:

  • 我将在这里到处都用C 替换C++:用C++,在你有类的地方,导出的名称会被破坏(并且不同的编译器使用不同的修改方案),并且在哪里从C++ 代码编译的DLL 应该看起来“正常”,导出的C++ 顶级函数声明被包装在export "C" { ... } 块中。因此,为简单起见,我将在这里到处使用C
  • @kostix 好吧,与 C++ 互操作是完全可能的,而 C++ 是与 C 不同的语言。显然,您必须遵循互操作规则。这是不言而喻的,这里没有任何建议使用 C++ 类。最后,使用重命名实际上不是一个坏主意。这确实意味着当您不小心更改函数的声明时,一切都会中断。一个有用的副作用。
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多