问题标签 [bpl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
907 浏览

windows - 用于构建在所有计算机上运行的发布 .exe 的项目设置

我正在使用 C++Builder XE2 对用户界面进行原型设计。我需要这个项目在所有 Windows PC 上运行,无论它们是否安装了开发人员工具。

如何将所有必需的库链接到我分发给用户的 .exe 中,以便他们可以运行应用程序?项目选项中应该设置哪些设置?

用户现在向我报告此错误:

在此处输入图像描述

0 投票
2 回答
1897 浏览

delphi - 访问 Delphi BPL 中的公共方法和属性

我有一个应用程序可以加载一个简单表单中的 BPL。

此表单是主应用程序的可选选项。

BPL 正确加载,表单正确显示,但我不知道如何访问 bpl 中表单的公共方法和属性。

谁能提供一个简单的例子?

我的代码:

如何在 Tform1 中访问“PublicMthd”?

0 投票
3 回答
2933 浏览

delphi - 包 (BPL) 自动命名后缀

我为 Delphi 编写了很多组件和库,其中大部分都需要使用 BPL 封装,以便它们可以安装到 IDE 中。

这很简单并且运行良好,直到您想要维护一组包项目文件(在单个项目组中),但还想为不同的 Delphi 版本编译和分发这些相同的包。

到目前为止,我一直在为每个 Delphi 版本创建一个不同的包项目,并明确定义一个 Delphi 版本标识符作为后缀(例如Kinect_XE.bplKinect_XE2.bpl)。

我知道,在Package Project的Project Options中,在Description下,有字段LIB prefix和(更重要的是我的需要)LIB suffix

我进一步知道,如果我在LIB suffix中放置一个值,它将被附加到已编译 BPL 文件名的末尾。

然而,我的问题是,首先是否可以让 IDE使用IDE/RTL 版本号自动填充LIB 后缀字段,如果可以……如何?

我相当确定这是可能的,因为看起来vcl120.bpl以及每个相应版本的 Delphi 的对应项)可以仅使用vcl来引用(作为要求)您自己的包,而不必键入完整的vcl120 . 事实上,这也是我希望实现的相同行为……我的包可以相互引用(必要时),而不必提供特定于版本的引用来容纳后缀。

同样重要的是,解决这个问题将使我能够在单个项目组中维护一组项目文件(XE2 明显例外,由于平台添加,它的项目文件不一定与以前版本的 Delphi 表现得很好)。

我怀疑我可能需要在LIB 后缀字段中输入一个类似$(VER)的值(或类似的值) ,但这似乎不起作用,我已经搜索谷歌寻找正确的解决方案。

希望你能帮忙!

更新 1

我现在正在编写一个与(至少)Delphi 2007 到 XE2 一起使用的 IDE 插件,它为 DLL 和 BPL 项目提供了一个名为AutoSuffix的新选项。当切换到 On时,任何安装了AutoSuffix插件的 IDE 都会立即将正确的 IDE 版本后缀应用到项目中。

AutoSuffix插件将在接下来的 24 小时内(免费)供所有人使用,并且此问题会相应更新

更新 2

好的... Delphi 2007 很痛苦!到目前为止,我已经让 AutoSuffix 与 2009 到 XE2 一起工作,但 2007 需要更多时间(请耐心等待)。

更新 3

看起来 Embarcadero 似乎听到了我们对更简单的版本之间的包统一的集体呼声。

Mark 将推动这一点,看看 Delphi 的未来版本是否可以容纳{$LIBSUFFIX AUTO}功能。我希望很快能收到回复,是否会是这样。如果是这样,它肯定会影响AutoSuffix在 XE2 和旧版本上工作的方式(因为目前它不提供简单的 AUTO 开关......它有自己的方法)。

我现在希望 EMB 会认真对待这个请求,将其作为一个完整的功能提供,以便它成为在现有版本上使用AutoSuffix以统一所有版本的流程的简单案例!

0 投票
7 回答
9920 浏览

delphi - Delphi App 调试时出现“无调试信息”

我们已经构建了一个使用包和组件的应用程序。当我们调试应用程序时,IDE 中的“事件日志”通常会显示我们的 BPL 正在加载而没有调试信息(“无调试信息”)。这没有任何意义,因为我们所有的包和 EXE 都是用调试构建的。

我们有 4 个项目,都使用运行时包构建:

  1. 核心.bpl
  2. 组件.bpl
  3. Plugin.bpl(同时使用 #1 和 #2)
  4. MainApp.exe(使用 #1)

观察到的问题

1) 很多时候,当我们调试时,Components.bpl 加载了调试信息,但是“局部变量”窗口中的所有值都是空白的。如果您将鼠标悬停在代码中的变量上,则不会弹出窗口,并且“评估”窗口也不会显示任何内容(“结果”窗格始终为空白)。

2) 有时事件日志显示各种 BPL 的“无调试信息”。例如,如果我们激活 Plugin.bpl 项目并将其设置为 Run | 参数的 Host Application 为 MainApp.exe,然后按 F9,除了 Plugin.bpl 模块外,所有模块似乎都加载了“Has Debug Info”。加载时,事件日志显示“无调试信息”。但是,如果我们关闭应用程序并立即按 F9,它将再次运行它而不重新编译任何内容,这一次 Plugin.bpl 加载了调试(“有调试信息”)。

问题

1) 什么会导致“局部变量”窗口显示值?

2) 为什么当 BPL 符合 debug 并且所有调试文件(dcu、map 等)都可用时,有时会在没有调试信息的情况下加载 BPL?

0 投票
0 回答
371 浏览

delphi - Delphi XE Datasnap:动态加载 DSServerModule 时缺少服务器方法

我有 Datasnap Server (DBX),它在启动时扫描目录,加载 BPL(包含 DSServerModules),然后注册它们以使它们可以从远程使用。

对于使用原始类型(例如整数、字符串等)的函数和过程,这一切都很好,但是从客户端我看不到任何具有“结构化”变量的方法。

例如,我尝试添加一个返回TJSONValue的函数(正如我在示例中看到的那样),但该方法对客户端不可见。

奇怪的是,如果将 DSServerModule 静态添加到项目中,则相同的功能可用(并且有效)。

任何猜测?

我没有附加任何代码,因为它是一个相当大的项目的一部分。如果需要,我会提供一个小例子。

干杯,米尔科

0 投票
0 回答
300 浏览

delphi - 如何从我的独立应用程序上的 bpl 获取组件名称

Classes.GetPackageInfo可以枚举一个包的所有单元和所需的包。但我想要一个像这样的 Proc:

这将从 Designtime 包中获取所有 IDE 组件。
有可能是一种通用的方式吗?例如。从 VC 应用程序调用这个过程?

0 投票
3 回答
2240 浏览

delphi - 获取给定 DLL、EXE 或 BPL 所需的 BPL 列表

我想知道是否有人知道确定给定(已编译)DLL、EXE 或 BPL需要哪些 BPL的优雅方法。

我不确定这是否可能只是简单地扫描二进制文件以查找对.bpl文件名的文本引用(这很容易出现误报)。

理想情况下,我想返回一个包含所有必需.bplTStringList文件名称的甚至逗号分隔的文件。String

0 投票
1 回答
2352 浏览

delphi - Delphi XE 找不到 BPL

我在 Delphi XE 中遇到问题,我有一个使用 QRDesign(QuickReports 的一部分)的项目。

我查看使用 QRDesign 的单元时遇到的错误是:

“程序无法启动,因为您的计算机中缺少 QRDBASE_DXE.bpl。请尝试重新安装程序以解决此问题。”

如果我不打开该单元,一切都编译得很好。

有趣的是,如果我卸载这个包和另一个包(dclqrd_DXE.bpl - 也是 QRDesign 的一部分),重新启动 IDE,重新编译并重新安装这些包,直到我重新启动 IDE 之前,一切都会再次运行。BPL 位于搜索路径中,并且每个文件仅存在一个副本。

有谁知道可能导致此问题的某些机制?

0 投票
3 回答
32555 浏览

delphi - 解决无法加载 BPL 但您已经重新编译的 Delphi BPL 包问题(Windows VirtualStore 文件系统问题)

我的一般问题是如何解决“我的 BPL 不会加载,因为依赖关系不会消失,无论我清理和重新编译多少次”。 更新您可能认为您有一个干净的重新编译系统,但由于 Windows 及其文件系统虚拟化错误功能的逆向奇迹,您没有。

当我尝试将我的设计时包(在本例中名为dclFsTee.bpl)加载到我的 Delphi IDE(它是快速报告 4 teechart 包装器组件包)中时,它抱怨:

tee7100.bpl知道的系统上的任何 DCP 或 DCU 文件都没有引用它。但很明显,出了点问题,我找不到问题所在。

所有 Delphi 用户都面临着一百个使用 BPL 的“无法编译或无法加载”的问题。当被问及该做什么时,普遍的避免是清理您的计算机。

然而,我现在已经花了几个小时清理我的计算机,虽然一切都在编译文件,但很明显,一定有一些过时的东西隐藏在某个地方,因为我试图加载的生成的 BPL 文件仍然想要加载一个版本几天前我从这个系统中删除的 TeeChart BPL,以及我能找到的每一条痕迹。

我删除的 Delphi 2007 中 TeeChart 东西的痕迹包括 $(BDS)\Lib 和 $(BDS)\Lib\debug 文件夹中的所有内容,以及系统上的所有 DCP 和 BPL 文件夹。每个以 TeeChart-unit 命名的 dcu 文件也都消失了。

一旦你走到了路的尽头,接下来你会尝试什么?(格式化硬盘,买新电脑。)认真的。我认为我是个聪明人,但我有一个 1 tb 的硬盘驱动器,一个运行到 80 多个文件夹的库路径,以及一个看起来组织良好的源代码存储库,但显然有些东西隐藏在我无法做到的地方找到它。

我有 TeeChart Standard 2012,带有完整的源代码,据我所知,我的开发机器不再包含 delphi 附带的“tee chart tee7100.bpl”版本中的任何旧 TeeChart BPL 或 DCP 文件。

我已经运行了 teechart 附带的“recompile.exe”向导,在向 tee.inc 文件写入 {$DEFINE x} 声明后,它似乎只是运行 MSBuild 并构建包(源代码中有两个)分配)。

然而,不知何故,似乎其中一个包的隐式导入之一正在绘制一些尚未重建的陈旧文件,因此它试图加载 tee7100.bpl。新的 bpl 名称是 tee911.bpl。

我没有提出关于fastreport 的非常具体的问题,我只是将它作为我在Delphi 开发时遇到过数十次的一般伤害世界的一个具体实例来提及。

我只提供快速报告的详细信息,因此您可以看到这实际上是一个一般问题的特定实例,在处理具有依赖关系的组件源代码或包或包集时,有时在 Delphi IDE 中会面临这个问题. 清理您的计算机,以便您的代码甚至构建都可能很棘手。

所以这是我的 Delphi package-to-package-dependency-resolution 问题:

  1. 查找或跟踪一些不再需要的 BPL 问题的隐式加载的最有效方法是什么,以便我的代码(构建和编译得很好!)实际上将加载到 Delphi IDE 中。运行 Recompile 生成的 BPL 文件似乎正确链接到正确的 DCP 文件,并且不存在旧的/陈旧的 DCP 或 DCU 文件。例如,新的 DCP 文件名为 tee911.dcp。

  2. 您能否以某种方式了解哪些包实际上是陈旧的,以及 .bpl 链接时正在读取、链接和静态导入的内容?(我在想可能像 BPL 文件的特殊类似 MAP 的文件?)

更新经过数小时的斗争,并使用了我所知道的每一个技巧,我意识到我没有检查 Windows 7 中文件虚拟化引起的一些VirtualStore相关问题。这意味着 Windows 7 依赖于在它之上运行的程序. 它为您提供了文件的另一个版本,这不是您想要的。这在几个方面可能是致命的;一; 您重新编译了一个 BPL,但它不是加载的。杀死我的 BPL 位于 VirtualStore 的 SysWow64 文件夹中。请注意,虚拟存储基本上会使幻像文件出现,只有当您是某个“低权限”程序时才会出现,这显然是 Win7/64 位上的 Delphi 2007。要删除当前用户帐户的 SysWow64 VIRTUALSTORE 文件夹中的 BPL 文件:

...有些日子我只是讨厌 Windows 体系结构。无论如何,我不会将上述内容作为答案,因为我想知道是否有人有更好的方法或任何提示或建议下次可能会有所帮助。

0 投票
1 回答
2805 浏览

c++ - 构建项目包 C++ Builder

我在 C++ Builder 中编写了一个 GUI 表单应用程序,并且希望能够在另一台计算机上运行 .exe。

尝试在另一台计算机上运行 .exe 时出现一些 .bpl 错误。

如何将所有需要的文件组合到一个“包”中,以便 .exe 可以在没有所需文件的计算机上运行?

我已经完成了 Project->Deployment 并出现了一个文件列表,包括 .bpl 文件。但是,从这里我该怎么办?

谢谢