Erstmal ein Wort zu den Endungen - da erklärt sich schon manches:
DCU -> Delphi Compiled
Unit (eine kompilierte
Unit die mal in das Binary gelinkt werden soll)
BPL -> Borland
Package Library (von der Sache her eine "normale"
DLL deren Exports nach der Delphi-Nomenklatur aufgebaut sind)
DCP -> Delphi Compiled
Package (gehört zu einer
BPL und beinhaltet die Information, damit die
IDE/(der Compiler?) mit dem
Package arbeiten kann)
Die
DCU kannst du komplett ignorieren.
Die
BPL brauchst du zu Entwicklungszeit und wenn du das Programm auslieferst, weil darin der eigentliche Code steckt.
Die DCP brauchst du nur zu Entwicklungszeit, damit die
IDE weiß, welche Units, Funktionen, Klassen, ... in der
BPL stecken. Die DCP weiß auch wie die
BPL heißt.
Deshalb wir in der requires-clause im Projekt auch die DCP angegeben und nicht die
BPL.
Welche weiteren Packages nötig sind, stellt der Compiler(?)/die
IDE fest. Entweder sagt der Compiler, das er die
Unit XYZ implizit einkompiliert hat, was sehr sehr unschön ist, weil es dann irgendwann eine Kollision mit einem
Package gibt, das diese Datei auch beinhaltet. Oder die
IDE sagt: Ha! Du musst noch folgenden Packages requiren damit es klappt. Das ist der beste Fall