gpt4 book ai didi

Delphi - 解开 BPL 中的名称

转载 作者:行者123 更新时间:2023-12-03 14:42:38 28 4
gpt4 key购买 nike

是否可以在 Delphi 中解开这些名称?如果是这样,我从哪里可以获得更多信息?

在 dbrtl100.bpl 中找不到特定条目的错误消息示例我想知道它找不到哪个确切的函数(单元、类、名称、参数等)。

---------------------------
myApp.exe - Entry Point Not Found
---------------------------
The procedure entry point @Dbcommon@GetTableNameFromSQLEx$qqrx17System@WideString25Dbcommon@IDENTIFIEROption could not be located in the dynamic link library dbrtl100.bpl.
---------------------------
OK
---------------------------

我知道这是 Dbcommon 单元中的 GetTableNameFromSQLEx 方法(我有带有 RTL/VCL 源代码的 Delphi),但有时我会遇到并非所有代码都可用的应用程序(是的,客户应该始终购买所有源代码)对于第 3 方的东西,但有时他们不这样做)。

但假设这是一个示例,我没有代码,或者只有接口(interface)文件(BDE.INT 有人吗?)它有哪些参数(即哪些潜在的过载)?它有什么返回类型?

对于任何 Delphi 版本来说,这种损坏都是一样的吗?

--杰罗恩

编辑 1:

感谢 Rob Kennedy:tdump -e dbrtl100.bpl 成功了。根本不需要-um:

C:\WINDOWS\system32>tdump -e dbrtl100.bpl | grep GetTableNameFromSQLEx
File STDIN:
00026050 1385 04AC __fastcall Dbcommon::GetTableNameFromSQLEx(const System::WideString, Dbcommon::IDENTIFIEROption)

编辑 2:

感谢 TOndrej 发现了这个 German EDN article (English Google Translation)。那篇文章非常准确地描述了该格式,并且应该可以创建一些 Delphi 代码来解决这个问题。

遗憾的是,作者提到的网站(和电子邮件)现已失效,但很高兴了解此信息。

--杰罗恩

最佳答案

Delphi 中没有提供可以解开函数名称的函数,并且我不知道它在任何地方都有记录。 Delphi in a Nutshell提到“tdump”实用程序有一个 -um 开关来使其解开找到的符号。我从来没有尝试过。

tdump -um -e dbrtl100.bpl

如果这不起作用,那么看起来并不是一个非常复杂的解决方案。显然,该名称以“@”开头,后面是单元名称和函数名称,并用另一个“@”符号分隔。该函数名称后跟“$qqrx”,然后是参数类型。

参数类型使用类型名称的字符数进行编码,后跟之前相同的“@”分隔格式。

“$”是标记函数名结束和参数类型开始所必需的。剩下的谜团就是“qqrx”部分。文章 Tondrej found 揭示了这一点。 “qqr”表示调用约定,在本例中为register,又名fastcall。 “x”适用于参数并表示它是常数。

返回类型不需要在重整函数名称中进行编码,因为重载无论如何都不考虑返回类型。

关于Delphi - 解开 BPL 中的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1591030/

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