- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在 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/
我正在使用 C++ Builder 10 Seattle,我正在尝试安装一个组件包,该组件包注册了在不同 bpl 中实现的组件。 从技术上讲,我已经这样做了: 我创建了两个包。一个仅定义为运行时 (c
我想知道是否有人知道一种优雅的方法来确定给定(编译)的 DLL、EXE 或 BPL 需要哪些 BPL。 我不确定这是否可能比简单地扫描二进制文件中对 .bpl 文件名的文本引用(这可能容易出现误报 )
我的一般问题是如何解决“由于依赖项不会消失,无论我清理和重新编译多少次,我的 BPL 都不会加载”。 更新 您可能认为您有一个干净的重新编译系统,但由于 Windows 的逆向奇迹及其文件系统虚拟化错
Delphi 中设计时包的可怕错误之一是以下错误,这意味着注册安装新组件到您的 Palette 上的包: Component TSomething can't be registered by pac
我有一个 BPL 项目(带有一些基本内容)和一个 EXE 项目,该项目的搜索路径中包含其他项目输出(BPL 和 DCP)的位置。当使用“Build With Runtime Packages”构建 E
我在 Internet 上发现的每个 BPL 相关问题都涉及一些 BPL,这些 BPL 已经随 Delphi 一起提供,或者至少在全局范围内安装到 Delphi 文件夹中。 我想制作我自己的应用程序来
我正在学习 TMS 的一个组件。我收到“...rtl100.bpl 未找到...”。如果我使用包含“rtl”的“使用运行时包构建”,可能会发生此错误。 rtl100.bpl 在哪里(我使用的是 D20
情况如下。我通常使用 RAD Studio 2010 进行 Delphi 开发。我有一些组件想以二进制形式重新分发(*.bpl,没有源代码)。但我希望人们能够使用它们,尽管有 Delphi 版本。但是
有一个从 BPL 导出的函数,简化如下 function DoA(amount: currency; var Info: string): Currency; stdcall; begin re
看起来很简单,但下面的代码不起作用。 BPL: procedure DoSomething(); begin LogEvent('Did'); end; exports DoSomething
我使用ADO Component制作了一个应用程序,并使用它连接到Oracle,当我在另一台计算机上运行它时,我没有任何问题。 但是,当我使用ODAC组件和TOraSession并通过Direct C
是否可以在程序启动时检查客户端计算机上安装了哪个版本的 BPL(即 Rtl70.BPL、Indy70.bpl 等)? 我有一些程序崩溃,因为那里计算机上的 BPL 与构建机器上的不同。 如果我必须在每
我使用 Delphi XE,我有以下设置: Mydll.dll和Package1.bpl(运行时包)都包含Unit3.pas unit Unit3; interface implementation
我正在尝试将 Orpheus 4.08 的最新版本添加到 Delphi XE2 和 Delphi XE3 中。除了通常的警告之外,包编译时没有错误,并且编译器发出成功信号。但是,我找不到 *.bpl
我正在 RAD Studio 2007 中开发一个项目,使用 C++ 中的 VCL 类。 TDBLookupControl 是 VCL 的一部分,并且有一些不良行为,这是由于使用内部变量 Search
试图了解为什么我们会收到“未找到入口点”的消息,而我知道它应该在那里。除了 map 之外,是否有一个工具可以“探索”.bpl 或 .dll 并显示入口点? 最佳答案 Delphi 附带 a comma
我正在一名delphi IDE专家中工作,现在为了避免依赖性问题,我正在考虑将这位专家重建为dll专家,正如其中一个answers中所建议的那样。 ,现在我的专家(编译为 bpl)访问 Screen
如果我在 EXE 中有一个资源并且我想提取它,这非常简单。像这样的东西: stream := TResourceStream.Create(HInstance, ResourceName, RT_RC
从 BPL 中,是否可以获得自己的文件名?例如C:\foo\bar.bpl (动态加载和delphi7,如果重要的话) 最佳答案 调用GetModuleFileName 。对于模块句柄,请使用 Sys
我想创建 *.bpl 文件,但我没有这样做。 具体来说,我正在尝试制作 JEDI 插件,但我也尝试过一个空的纯 Delphi 包。 如果我在 Delphi XE3 中创建一个新包,我会得到一个空单元
我是一名优秀的程序员,十分优秀!