问题标签 [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 投票
0 回答
108 浏览

c++ - BPL 依赖的范围是什么

我得到了三个 BPL:A、B 和 C。A 包含 B,B 包含 C。它们都已编译并正常工作。

如果我对 C 进行一些更改(添加/删除属性和方法)我应该重新编译:

  • C, B 然后 A
  • 或者只是 C 然后 B

让它正常工作?

换句话说,当我对 C 进行一些更改时,我必须再次编译 B,因为 C 上的输入点已更改。但是由于上次编译B,我是否还必须再次编译A?

我会说编译 C 然后 B 就足够了,但我真的不确定。

0 投票
0 回答
160 浏览

delphi - 从 Delphi 7 DLL 加载 Delphi Seattle BPL

我在 Delphi 7 中有一个主应用程序,它加载一个 Delphi 7 dll(让我们调用“X”dll)。这个dll是一个“应用程序核心”和一个“基于数据库代码的框架”。这个dll包含很多东西。除了主应用程序之外,我还有很多其他 dll 使用 X dll 来访问数据库。这是一个遗留应用程序。

我需要将应用程序迁移到 Delphi 10 Seattle,但我不能一次完成。这是一个非常大的应用程序。

所以我想出了这个想法:转换主应用程序并创建一个新的数据库框架,这次在 Delphi Seattle BPL 中,静态加载。当我的应用程序启动时,我会动态加载 X dll。在 X dll 中,我动态加载 BPL 并将访问数据库的所有方法更改为使用 BPL 方法。这样,我现在不会触摸的其他 dll 将继续工作。

问题是:我无法从 X dll 加载 BPL。它只是提出了一个AV。我尝试使用 LoadLibrary 和 LoadPackage,都失败了。我发现如果我在 Delphi Seattle 编译那个 X dll,它就像一个魅力。但是,我不能那样做,因为就像我开始说的那样,这个X dll有很多超出数据库访问的东西,我现在没有时间转换。

所以,问题是:如何从 Delphi 7 DLL 加载 Delphi 10 Seattle BPL?

0 投票
1 回答
246 浏览

linker - 无法在 BPL 中找到未解析的外部/过程入口点

我在继承自TFileStream的现有项目中有一个名为TTextStream的类。它有一组重载的operator<<operator>>函数作为成员函数。

大多数建议相反,您应该为这些运算符编写外部函数,并使它们成为相关类的朋友,以便能够访问私有和受保护的成员。

因此,作为浏览和清理代码的一部分,我这样做了。

并添加了功能示例

然后像往常一样在.cpp中实现。

然后在我添加的TTextStream类中

该项目生成一个C++ Builder 包 (BPL),我们称之为Foo.bpl。它编译得很好,然后我继续编译下一个 BPL 包Bar.bpl,它使用来自Foo.bpl的功能。

所有这些 BPL 都输出到“默认”文件夹C:\Users\Public\Documents\Embarcadero\Studio\20.0\BLP

Foo.bpi添加在Bar.bpl项目Requires下。

在建造时我得到了

如果我尝试与Foo.lib静态链接,它可以正常工作。经过一番挖掘,我得出结论,该函数没有正确导出到Foo.bpl

据我了解,我必须为此使用PACKAGE宏,因此我将其添加到.h文件中的定义和.cpp文件中的实现中。

我重新编译Foo.bpl,然后编译Bar.bpl,它现在可以正常编译和链接。但是Bar.bpl是一个运行时和设计时包,当我在 IDE 中安装它时,会弹出一个 Windows 消息对话框,其中包含与以前基本相同的消息。

所以它似乎抱怨没有找到一个函数,这似乎是在Bar.bplFoo.bpl中导出的?

不太确定我错过了什么。TDUMP似乎表明它实际上正在被导出。

或不拆线

我还测试了其他调用约定以排除这种情况。

作为辅助测试,我还创建了一个小测试用例。

生成带有单元 (functions.h/functions.cpp) 的 bpl 的项目添加了单个函数

这只是将两个数字相加,并在 .cpp 文件中实现。编译并链接 BPL。

然后我创建了一个控制台应用程序,它需要有问题的 bpl,包含带有函数定义 (functions.h) 的头文件,编译并且链接失败并出现相同的错误。所以我可能错过了一些明显的小事......

所有这些都是使用RAD Studio 10.3.2完成的,而不是使用经典编译器。

0 投票
1 回答
171 浏览

delphi - Delphi XE6 crashes while installing bpl

I have a project developed in delphi, that intends to install some components. These components are nothing but just inherited children of Firedac, and some other.

When I open the project in Delphi XE6, it opens fine. But, when I try to install the .bpl project by right clicking on project and selecting install option, the IDE crashes everytime.

The target platform is 32 bit. Each time, when XE6 crashes and gets shut down, there is a error in event log. The screenshots for event logs are attached.General TabDetails Tab

Also, I have tried with allowing the bds.exe app in firewall profiles.

It used to crash earlier also, but after trying for some time, it used to work. Now it does not. I have also tried with old code base for .bpl project but that does not help.

Any help on this is really appreciated.

0 投票
1 回答
163 浏览

delphi - 有没有办法避免将 DCU 链接到 BPL?

我们使用包将我们的代码库拆分为更小的部分,但始终部署为单个单一的可执行文件。

编译包时,包项目中的单元被链接到 .dcp 和 .bpl 文件中,最后它们再次链接到可执行文件 (.exe) 中。

这有点浪费时间,我希望 Delphi 只编译 DCU 而不是将它们链接到包中。

所以:

是否可以关闭包的链接,只链接最终的可执行文件?

0 投票
0 回答
157 浏览

package - C++ Builder 2010。无法加载包。找不到模块

我刚刚安装了 Builder C++ 2010。我一直在 Windows 7 中使用它,但我已经升级到 Windows 10,现在我遇到了 BPL 问题:我打开了一个项目,其中包含我创建的一些组件,我通常在 Windows 7 中使用,当我右键单击并单击“安装”时,它会正确编译和链接,但随后会出现一个对话框,显示“无法加载包 C:\Users\Public\Documents\RAD Studio\7.0\BPL \XXX.bpl。找不到指定的模块”

我查看了那个文件夹并且 bpl 在那里。我确保我的用户已经被分配了对文件夹和 bpl 的完全控制权。该文件夹位于系统路径中。

我试图直接从组件/安装包/添加菜单栏执行此操作,但同样的事情发生了,尽管它有时会说“整数溢出”。

恐怕这与 Windows 10 的限制有关。有人可以帮帮我吗?提前致谢!

何塞。

使用 www.DeepL.com/Translator 翻译(免费版)

0 投票
0 回答
281 浏览

delphi - Delphi BPL 无法动态加载 64 位包

当应用程序和库都编译为 64 位时,动态加载我的库时遇到问题。

以下声明:

导致以下错误:

Project Project1.exe 引发异常类 EPackageError,并显示消息“无法加载包 F:\New Projects\bpls\exe\Win64\Debug\libs\MinhaLib.bpl。
%1 不是有效的 Win32 应用程序”。

如果我为 32 位重新编译应用程序和库,则一切正常。

我将我的库更改为 DLL 并使用该LoadLibrary()函数。在这种情况下,一切都在 32 位和 64 位中完美运行。

为了使 BPL 库在 64 位中工作,我是否必须对其进行任何更改?

我正在使用德尔福 10.3。

项目1.dpr:

库.dpk:

单元1.pas:

0 投票
1 回答
49 浏览

delphi-2010 - 我如何解决错误 dxdbtrD14 bpl is missing

请帮我解决这个问题。

当我将项目移动到另一台 PC 时,就会出现这个问题。这个程序在我的电脑上运行良好。

这是我的错误信息截图

0 投票
1 回答
55 浏览

delphi - Vclimg:需要来自其编译文件 Vclimg.dcp 的 Vclimg.bpl 文件

我正在使用 Rad Studio 10.4.2 Sydney。

我用运行时包构建了一个项目。需要一个包 - Vclimg.dcp。最终程序需要该Vclimg.bpl运行时插件才能成功加载。

我在我的电脑上搜索它,但没有这样的 bpl 文件,只有它是 dcp 等效文件 (Vclimg.dcp)。

我们可以仅从其编译文件 *.dcp 构建 *.bpl 文件吗?如果可以,那怎么办?如果没有,我可以从哪里获得Vclimg.bpl运行时插件所需的内容?

0 投票
1 回答
66 浏览

delphi - 如何激活 BPL 文件中的断点?

我正在使用德尔福 10.4。

我有一个 Delphi 可执行文件XXX.exe和一个 Delphi 包BBB.Bpl,由XXXwith加载LoadPackage('BBB.Bpl')

两者都是 Delphi 中的独立项目。

我打开BBB.Bpl项目,指示我XXX.exe作为主机应用程序。构建完成后BBB,编辑器右侧的蓝点可见,并且可以在BBB代码中设置断点。

当我开始BBB项目时,例如。F9XXX应用程序执行该LoadPackage过程而不会失败,并执行来自 的命令BBB。但是,BBB代码中的断点被禁用,蓝点也不可见。应用程序代码中的断点XXX工作正常。

我在谷歌上搜索了很多,没有任何帮助。

我尝试检查并添加更多搜索路径、大量编译器/链接器选项(调试信息 = true 等),但我无法调试 Bpl 的源代码。

谁能给我一些提示?