Questions tagged [bpl]

Borland Package Library - special kind of object-oriented DLL with enforced type-safety

Delphi is component-based IDE for its proprietary dialect of Pascal language.
Differing from its competitor Visual Basic, it could "eat its own food" - create those components to extend itself.

Up to 1996 to install them one need to recompile part of IDE, similar to installation in Lazarus/FCL IDE. That resulted in two problems:

  • The more components you install - the heavier IDE becomes, and computers back then had significantly less memory. You could not arrange different components subsets per project.
  • If some component proved cruelly broken and crashed IDE, reconfiguring and rebuilding it without the component becomes less obvious task w/o using IDE.

It also made little help to deploy large programs: one either had to deploy large monolithic EXE which could cause problems in OSes with 16-bit kernel (Windows 9x/ME), or develop traditional Windows DLL sacrificing all type safety and complex types (passing objects and strings on EXE/DLL or DLL/DLL boundary would be extremely fragile, practically impossible for average programmer).

With the release of Delphi 3 in 1997 Borland introduced specific type of DLL, the one with enforced type safety (dependencies are codified at compile-time and checked at load time) and changed one letter: DLL -> DPL - Delphi Package Library.

Next year Borland C++ Builder 1 was released (with built-in Delphi 3.5) and those libraries were renamed again: DPL -> BPL - Borland Package Library.

BPL remains the basement for component-based RAD Studio IDE design up to today.

Drawbacks of BPL:

  • Increases "implementation leakage" problem of Turbo Pascal, source Units of which where introduced before OOP trend. That forces private members and datatypes (worker classes) used be promoted into public unit interface. Later Delphi language designer fixed the problem by introducing partial classes into C#, but in Delphi this feature is missing. Since BPL publishes all interface sections of all the contained units, even internal "worker" units, there is no way to make stable contained API and spaghetti dependencies may easily happen unnoticed.
  • Since every unit is public by definition - and since BPL may be re-used by other apps - the Smart Linker is defeated. If you only need 1% of the library - you either re-work it or you deploy the whole library with 99% of slab. In monolithic EXE mode compiler would record XRefs and the Smart Linker would eliminate unused 99% of the library.
  • This also means you can not have several unit with the same name, like you can with DLLs. It is not big issue but may be inconvenient.
  • This also means that if you re-work some class like adding new internal method (virtual or not) - the class signature changes and all the depending BPLs have to be re-compiled and re-deployed. It is especialyl annoying when you need some fix in stock RTL
  • If you change compiler options or version, this change affects internal classes/functions ABI and all dependent packages should be re-build and re-deployed.
101 questions
0
votes
1 answer

How to register Win32 and Win64 component in Embarcadero C++Builder 11 Alexandria

I can't find information on how to register a component (a Package) in Embarcadero C++Builder 11 Alexandria Professional, to be used for both 32-bit and 64-bit projects. Some informations that I found is in…
Zio3D
  • 1
  • 1
0
votes
1 answer

How to activate breakpoints in a BPL file?

I'm using Delphi 10.4. I have a Delphi executable XXX.exe and a Delphi package BBB.Bpl, which is loaded by XXX with LoadPackage('BBB.Bpl'). Both are separate projects in Delphi. I open the BBB.Bpl project, indicating my XXX.exe as the Host…
0
votes
1 answer

Vclimg: Needs Vclimg.bpl file from its compiled file Vclimg.dcp

I'm using the Rad Studio 10.4.2 Sydney. I build a project with runtime packages. One package required - Vclimg.dcp. The final program needs the Vclimg.bpl for that runtime plugin to load successfully. I search for it on my PC but there is no such a…
HasDev
  • 65
  • 6
0
votes
1 answer

how i solve error dxdbtrD14 bpl is missing

Please help me with this problem. This problem comes when I move my project to another PC. This program works fine on my PC.
Fafa
  • 5
  • 3
0
votes
0 answers

C++ Builder 2010. Can't load package. Unable to find module

I just installed Builder C++ 2010. I've always used it in Windows 7, but I've upgraded to Windows 10 and now I have a problem with BPL: I've opened a project with some components created by me, which I usually worked with in Windows 7, and when I…
Jose
  • 31
  • 4
0
votes
1 answer

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…
0
votes
0 answers

Load Delphi Seattle BPL from Delphi 7 DLL

I have a main application in Delphi 7 which loads a Delphi 7 dll (lets call the "X" dll). This dll is an "application core" and a "data base code based framework". This dll holds a lot of stuff. Beyond the main application, I have a lot of others…
Samuel
  • 259
  • 3
  • 15
0
votes
1 answer

Recompile Delphi 64-bit vcl250.bpl

I wish to make a fix to StyleUtils.inc in Delphi Tokyo. My project is linking with runtime packages. My app is 64-bits and so I would like to rebuild the vcl250.bpl in the ..\Redist\win64 directory. I do realize that StyleUtils.inc is listed as not…
DelphiGuy
  • 211
  • 2
  • 11
0
votes
2 answers

How to stop Final Builder 8 from destroying the rc file using Delphi 10.2 Tokyo

When I try to build some DPKs in IDE it compiles properly and generates a appropriate BPLs, but when I try to do it with the command line, using Delphi 10.2 Tokyo then I'm getting errors like: ... .rc(14) : error RC2132 : expected VALUE, BLOCK, or…
Gilmor
  • 439
  • 1
  • 3
  • 11
0
votes
1 answer

Why can't I load GLScene as a package in C++Builder?

I am trying to use GLScene (a third-party FireMonkey component for C++Builder and Delphi). I downloaded the zip, and in it, among other things, are .bpl files for use in C++Builder. When I try to install the package in my project (a C++Builder…
Andrew Farm
  • 178
  • 1
  • 14
0
votes
0 answers

Missing rtl150.bpl when adding a package

I am trying to recompile old Delphi program from 2011 which uses external bpl packages. They are named as SentrolBase150.bpl and so on but when I am trying to import those packages I am getting an error message saying rtl150.bpl not found. I looked…
itix
  • 59
  • 11
0
votes
1 answer

Load Frames from packages

I have three frames inside separate three bpls, in my main application i have created three buttons and , i want to call the frames dynamically(one at a time )when the respective button is clicked (the frame can be shown in any control eg :…
Vibeeshan Mahadeva
  • 7,147
  • 8
  • 52
  • 102
0
votes
0 answers

Include Delphi BPL in C++ Builder project

I have code in a Delphi BPL and want to use it in C++ Builder. However, it doesn't work for me. Here is what I have done: (1) The Delphi BPL package: package PackageNameHere; {$R *.res} {$ALIGN 8} {$ASSERTIONS ON} {$BOOLEVAL OFF} {$DEBUGINFO…
Daniel Marschall
  • 3,739
  • 2
  • 28
  • 67
0
votes
1 answer

delphi exe and dll without build with runtime packages

For my last project i was using many frames in my delphi application ,so i dicided to create dlls and put them inside the dlls(ALL created in Delphi) i have gone through many websites and came up with the code that works but for that example i have…
Vibeeshan Mahadeva
  • 7,147
  • 8
  • 52
  • 102
0
votes
1 answer

How to add "vcl.bpi" to BPL project

I use C++ builder 2009 to create a BPL project. The "Requires" list has "rtl.bpi" as default. I add some VCL Forms to the "Contains" list and try to build the BPL project. The build fails due to linker error such as "Unresolved external…
odomchen
  • 45
  • 7