使用 BPL 加载 Delphi 对象运行时

2023-12-30

我在一个单位上课。通常,当我改变其方法的算法时,我必须重新编译它并整体交付补丁。 我想使用 DLL 创建类的实例。在delphi.about.com搜索后,我发现可以使用BPL代替DLL。它是 Delphi 的 DLL。问题是我发现的几乎所有示例都只是告诉如何导出函数。 我想动态加载BPL,每当我替换BPL时,我都可以获得该类的最新算法,而不仅仅是我导出的函数。

我读过的文章:
- http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm
- Delphi 应用程序的插件系统 - bpl 与 dll? https://stackoverflow.com/questions/1192734/plugins-system-for-delphi-application-bpl-vs-dll
- http://delphi.about.com/library/weekly/aa012301a.htm http://delphi.about.com/library/weekly/aa012301a.htm

非常感谢任何 URL 或如何从头开始创建 BPL 来封装组件或类的示例。


亲爱的上师,

假设我有这样的代码:

unit unitA;

interface

type
  B = class(TObject)
  public
    procedure HelloB;
  end;

  A = class(TObject)
  public
    function GetB: B;
    function HelloA: String;
    procedure Help;
  end;

  implementation

  uses
      Dialogs;

  { B }

   procedure B.HelloB;
   begin
     ShowMessage('B');
   end;

  { A }

  function A.GetB: B;
  begin
    Result := B.Create;
  end;

  function A.HelloA: String;
  begin
    Result := 'Hello, this is A';
  end;

  procedure A.Help;
  begin
    //do something
  end;

  end.

我想导出A的所有公共方法,如何将其做成DLL? 如何从另一个单位导入它来使用它? 比方说:

 var a: A;

 a := A.Create;
 a.GetB;
 showMessage(a.HelloA);

A 未在单元中声明(它在 DLL 中)。 请指教。


欢呼。我昨晚收到了。我所要做的就是让对象实现一个接口,该接口在调用方单元中使用来捕获 DLL 返回的对象实例。

谢谢你们。


Mason 已经解决了这个问题,但让我详细说明一下为什么 BPL 不是您想要的。 BPL 是 Delphi IDE 加载共享相同内存管理器和 RTL 的组件的一种方法。 (类型标识使用 BPL 几乎透明地工作)

然而,你所陷入的依赖关系几乎总是不可接受的。除了IDE,无论如何它都无法处理不同版本的RTL和VCL。

当您仅在应用程序及其 DLL 之间传递接口引用时,您根本不必共享 RTL、VCL 或共享包。

这也意味着您可以用另一种语言(C++、C#、FPC、另一个 Delphi 版本)编写一些 DLL,并且仍然使用对象。当您不想移植主应用程序但仍想使用不适用于 Delphi 或您的 Delphi 版本的现有库时,这可能很诱人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 BPL 加载 Delphi 对象运行时 的相关文章

  • 在 Delphi 中的 SOAP 标头中发送简单字符串

    我需要发送这样的东西
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • Delphi - 获取和设置 ListView 的滚动条位置

    这似乎是一个愚蠢而简单的问题 然而 我一直无法找到令人满意的答案 基本上 我有一个列表视图 样式 vsReport 与数据 有时 我必须更新它 因此 我必须清除列表视图并用更新的数据再次填充它 但是 当我这样做时 滚动条位置将重置为 0 我
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 太多的导入正在垃圾邮件我的 Java 代码

    在我的项目中我有一个shapes包含我为图形程序设计的形状的包 例如 长方形 and Circle 我还有一两个同名的软件包java awt类 现在 由于我不想重命名代码库中的每个类 为了显示我的源文件 当我声明一个新的矩形时 我需要执行以
  • 任意通用列表的通配符

    我有一个类 MyClass 它不是通用的 包含任意 TList 并对其执行某些操作 我希望用通用 TList 替换 TList 但 MyClass 必须保持非通用 由于 Delphi 是不变的 这样的事情是行不通的 list1 TList
  • Delphi 中是否有一些功能可以将带有 html 命名和编号实体的字符串转换为 unicode 文本?

    我从 mysql 数据库读取数据 该数据库由 php 脚本填充 所有特殊字符都会转换为命名或编号的 html 实体 例如 a m p 2 8 6 我知道没有办法将这些字符转换回 Delphi 中的原始字符作为 unicode 字符串 有没有
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗
  • Writeln 能够支持 Unicode 吗?

    考虑这个程序 APPTYPE CONSOLE begin Writeln Z end 使用 Consolas 字体的控制台上的输出是 Z Windows 控制台非常有能力支持 Unicode 如该程序所示 APPTYPE CONSOLE u
  • 如何在 VC++ 6.0 项目中使用 DLL 而无需其 .h 和 .lib 文件?

    我不知道如何执行以下操作 我正在使用 MS Visual C 6 0 我有一个可编译的 Win32 DLL 项目 我有另一个项目 这次是一个 Win32 控制台项目 它使用 DLL 通过包含它的头文件并链接 lib 文件 DLL 现在我想要
  • 当系统文件实际存在时找不到它

    系统找不到alg exe但它确实存在 c windows system32 alg exe 我最近从 Win 7 x86 迁移到 x64 当我使用 x86 时 我对此没有任何问题 尝试了 Delphi 7 和 XE2 我正在使用的代码 if
  • 安装软件包时出现无法加载软件包 %s 错误

    我正在 Delphi 2007 上进行测试 我的小组项目由 2 个包组成 包运行 bpl 它被标记为 仅运行时 并包含一个名为 uMyTestRun pas 的单元 其中定义了一个空的 TFrame 后代 unit uMyTestRun i
  • 从 C++ .dll 到 Delphi Forms 应用程序的 PostMessage 问题

    我有用 Delphi 7 编写的 Windows 窗体应用程序和使用 MFC 编写的 C dll 目前 我正在尝试实现从 dll 到主可执行文件的基本消息发布 以在进度条上显示用户计算过程 但遇到了几个问题 让我先描述一下我的方法 我在 D
  • 安装库时-devel是什么意思?

    我正在阅读一些自述文件 它们包含一些带有 devel 的软件包 还有一些没有 有什么不同 sudo yum install gcc vs sudo yum install pcre devel 如果我安装 sudo yum install
  • 如何隐藏主窗体而不是关闭它?

    如果用户点击X在我的主窗体上 我希望窗体隐藏 而不是关闭 这听起来像是一份工作OnClose表单事件 http docs embarcadero com products rad studio delphiAndcpp2009 HelpUp
  • Delphi TTask - PPL 中匿名函数中的变量捕获如何工作?

    我开始深入研究 Delphi D11 PPL 并编写了这个小例子 procedure TForm2 LaunchTasks const cmax 5 Var ltask ITask i j Integer begin for i 1 to
  • Delphi 中的非字母排序

    我正在尝试按特定顺序对字符串列表进行排序 我尝试用 B C A 来订购 而不是 A B C 我已经按照我需要的顺序声明了一个 const 数组 我尝试过 CustomSorte 但我不明白如何编写该函数 我现在正在尝试使用 for 循环 但
  • 挂钩到文件,实时读取新内容

    我如何连接到另一个程序当前正在使用的文件 该程序不断向该文件写入内容 假设有一个 10 行的文本文件 当我启动我的应用程序时 每次写入程序保存其内容时 它都必须检测并读取其中的任何内容 可以在不不断检查文件大小 日期的情况下完成此操作吗 您
  • 惠普定制 OEM Windows 上的 Delphi 平台错误

    我在设置我的计算机以便运行 Delphi 时不断遇到相同的错误 我已经在PLATFORM环境变量 将其转换为 win32 但仍然给出相同的错误 错误错误 平台变量 HPD 无效 PLATFORM 必须是以下之一 Win32 Win64 An
  • 整理包中的字段说明

    我很抱歉 因为我知道这个答案可能出现在编写 R 包的手册中 但在我阅读和查看其他包的整理字段时 我无法 100 弄清楚该字段的用途 用简单的语言 我的是英语 来看 包的描述文件中的整理字段有什么作用 人们想在那里放什么 我认为这来自于某个时

随机推荐

  • 使用 Java ZipOutputStream 和 BufferedOutputStream 的首选方式

    在Java中 我是否实例化一个有关系吗 压缩输出流 http docs oracle com javase 8 docs api java util zip ZipOutputStream html首先 或者缓冲输出流 http docs
  • 在纯 PHP 中执行 git pull

    我想知道是否有人知道一个库或如何使用纯 PHP 执行 get pull 请求 withoutgit 正在安装在服务器上 首先 这可能吗 我见过奇怪的类 但他们似乎无法执行拉取请求 我想另一种选择是将某种形式的精简版 git 与我的脚本捆绑在
  • 仅当主机名包含字符串时才运行 Ansible 任务

    我的角色有多项任务 如下所示 我不想创建另一个yml文件来处理此任务 我已经包含了 Web 服务器 但是我们的几个 Perl 服务器需要安装一些 Web 软件包 name Install Perl Modules command
  • R中如何获取没有列名的矩阵元素?

    这似乎很简单 但我找不到答案 我使用 cbind 组合两个向量 gt first c 1 5 gt second c 6 10 gt values cbind first second 当我想使用values 1 2 检索单个元素时 除了实
  • 如何将 Django FileField 与动态 Amazon S3 存储桶结合使用?

    我有一个带有 Filefield 的 Django 模型 以及使用 Amazon S3 存储桶的默认存储 通过优秀的Django 存储 http django storages readthedocs io 我的问题不是将文件上传到动态文件
  • 单击 p:commandButton 时,不会调用 p:inputText 上的 p:ajax 模糊事件

    我想通过单击命令按钮时的 ajax 调用将数据传递给 back bean 我有一个带有几个输入文本字段的表单 其中每个字段都有 ajax 模糊事件 除了流动的场景之外 在快乐的流程中一切都工作正常 当我直接单击提交时 Ajax 模糊事件正在
  • vim屏幕恢复

    我在屏幕中使用 vim 进行开发 如果我退出 vim 当前的屏幕内容将保留在那里 在屏幕之外 xterm 退出vim将恢复之前的缓冲区 喜欢 server1 cmd some stuff some stuff server1 cmd ser
  • java string.Substring StringIndexOutOfBoundsException 循环内

    有人可以解释一下吗 这是代码示例 使用参数调用函数 S26V5 private String uniqueCode String inp String index 023456789ABCDEFGHJKLMNOPQRSTUVWXYZ int
  • Symfony2 路由 - 路由子域

    有没有办法设置基于主机名的路由Symfony2 我在官方文档中没有找到有关此主题的任何内容 http symfony com doc 2 0 book routing html http symfony com doc 2 0 book r
  • 如何突出显示文本区域中的部分文本

    有没有办法突出显示文本区域中的部分文本 说一下 文字是Hi twitter twitpic现在我想强调 twitter and twitpic仅且不Hi 那可能吗 这必须即时发生 PS 我不想用iFrame 提前致谢 Use setSele
  • JAX-WS servlet 过滤器异常

    我有一个通过 SOAP 进行通信的客户端 服务器应用程序 服务器端应用程序是一个 Java EE 应用程序 它使用 JAX WS 公开 Web 服务 我有一个 Servlet 过滤器设置 用于在调用服务之前执行某些检查 除了异常处理之外 这
  • 使用SAS和mkdir在windows中创建目录结构

    我想在 Windows 中从 SAS 中创建目录结构 最好使用允许我指定 UNC 命名约定的方法 例如 computername downloads x y z 我在网上看到很多使用 DOS 的 SAS 示例mkdir通过调用命令 syse
  • 漏洞? Stargazer 无法使用“省略”选项正确显示固定效应/因子标签?

    当我生成一个表时stargazer并省略固定效应 然后指定omit labels选项 stargazer 版本 5 2 2 每列显示 否 这是一个例子 library stargazer generate example data set
  • ViewPager2/Tabs 的 ViewModel 状态问题

    我遵循 MVVM 模式 这意味着每个片段都有一个 ViewModel I added two使用 ViewPager2 进行选项卡 我的适配器如下所示 Override public Fragment createFragment int
  • 如何在 iOS Simulator 9.1 上启用强制触摸压力

    带有 Xcode 7 1 的新 9 1 模拟器具有模拟 iPhone 6s 6s 等强制触摸的功能 但该选项呈灰色 禁用 iOS 模拟器 gt 硬件 gt 强制触摸压力 已禁用 截图供参考 有人知道如何启用此选项吗 注意 我在 iPhone
  • 使用 printStackTrace() 来处理异常是一个坏主意吗?

    在像这样的 Android 异常中使用 printStackTrace 是一个坏主意吗 catch Exception e e printStackTrace 我相信这就是您所需要的 catch Exception e Log e TAG
  • 如何在 Obj-C 代码中引用环境变量

    我在 Xcode 源代码树中定义了一个名为 MY SRC DIR 的路径变量 我想获取这个环境变量的值并将其放入 obj c 代码中的 NSString 中 例如 NSString getSourceDir return MY SRC DI
  • 在 React 中从数组中删除项目时出现意外行为

    我到处寻找这个问题的答案 但我只需要一些人的帮助 我有一个简单的表单 用户可以在其中添加其他字段 用户还可以删除不再相关的字段 我遇到的问题是删除字段 这些字段是从组件状态中的数组呈现的 但是当我尝试从数组中删除项目时 它始终是数组中的最后
  • 本地开发 Alexa 技能时出现 Dynamo 错误“ConfigError:配置中缺少区域”

    在本地开发和调试 Alexa 技能时使用定制工具 https bespoken tools 连接到 Dynamo 时发生错误 使用Alexa Node js SDK https github com alexa alexa skills k
  • 使用 BPL 加载 Delphi 对象运行时

    我在一个单位上课 通常 当我改变其方法的算法时 我必须重新编译它并整体交付补丁 我想使用 DLL 创建类的实例 在delphi about com搜索后 我发现可以使用BPL代替DLL 它是 Delphi 的 DLL 问题是我发现的几乎所有