Packaging faible

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste des directives de compilation Delphi - Index


Type

Commutateur

Syntaxe

{$WEAKPACKAGEUNIT ON} ou {$WEAKPACKAGEUNIT OFF}

Par défaut

{$WEAKPACKAGEUNIT OFF}

Portée

Locale



Remarques

La directive $WEAKPACKAGEUNIT affecte la manière dont un fichier .dcu est stocké dans les fichiers .dcp et .bpl d'un package Delphi sur la plate-forme Win32, ou, de la même façon, la manière dont un fichier .dcuil est stocké dans les fichiers. dcpil et .dll du package sur la plate-forme .NET. Si {$WEAKPACKAGEUNIT ON} apparaît dans un fichier unité, le compilateur omet l'unité des bpl ou dll lorsque cela est possible, et crée une copie locale "non packagée" (non utilisée dans le package) lorsque cela est requis par une autre application ou un autre package. Une unité compilée avec cette directive est dite "faiblement packagée".

Supposez par exemple qu'un package appelé PACK ne contienne qu'une seule unité, UNIT1. Supposez qu'UNIT1 n'utilise pas d'autre unités, mais effectue des appels à RARE.DLL. Si la directive {$WEAKPACKAGEUNIT ON} est insérée dans UNIT1.pas avant la compilation, UNIT1 ne sera pas incluse dans PACK.BPL (ou PACK.DLL sur .NET) ; il ne sera pas nécessaire de distribuer des copies de RARE.DLL avec PACK. Toutefois, UNIT1 sera toujours incluse dans PACK.dcp (ou PACK.dcpil sur .NET). Si un autre package ou une autre application utilisant PACK fait référence à UNIT1, celle-ci sera copiée à partir de PACK.dcp (ou PACK.dcpil sur .NET) et compilée directement dans le projet.

Supposez maintenant qu'une deuxième unité, UNIT2, soit ajoutée à PACK et que UNIT2 utilise UNIT1. Cette fois, même si PACK est compilé avec {$WEAKPACKAGEUNIT ON} dans UNIT1.pas, le compilateur inclura UNIT1 dans PACK.BPL (ou PACK.DLL sur .NET). Toutefois, les autres packages ou applications faisant référence à UNIT1 utiliseront la copie (non packagée) prise dans PACK.dcp (ou PACK.dcpil sur .NET).

Remarque :  Les fichiers unité contenant la directive {$WEAKPACKAGEUNIT ON} ne doivent pas contenir de variables globales, de section d'initialisation ou de sections de finalisation.

La directive $WEAKPACKAGEUNIT est une fonctionnalité avancée à l'intention des développeurs distribuant leurs packages à d'autres programmeurs. Elle peut permettre d'éviter la distribution de DLL qui ne sont pas fréquemment utilisées et d'éliminer les conflits entre les packages qui peuvent dépendre de la même bibliothèque externe.

Par exemple, l'unité PenWin de Delphi fait référence à PENWIN.DLL. La plupart des projets n'utilisent pas PenWin et la plupart des micro-ordinateurs n'ont pas PENWIN.DLL installée. Ainsi, l'unité PenWin est faiblement packagée dans VCL60 (qui comprend plusieurs composants Delphi fréquemment utilisés). Lorsque vous compilez un projet utilisant PenWin et le package VCL60, PenWin est copiée depuis VCL60.DCP et liée directement dans votre projet ; l'exécutable résultant est statiquement lié à PENWIN.DLL.

Si PenWin n'avait pas été faiblement packagée, deux problèmes se seraient produits. Premièrement, VCL60 lui-même aurait été statiquement lié à PENWIN.DLL, et n'aurait alors pas pu être chargé sur un micro-ordinateur n'ayant pas PENWIN.DLL installée. Deuxièmement, si quelqu'un avait essayé de créer un package contenant PenWin, il y aurait eu une erreur de compilation car l'unité PenWin était contenue dans VC60 ainsi que dans le nouveau package. Par conséquent, sans "packaging faible", PenWin n'aurait pas pu être incluse dans des distributions standard de VCL60.

Voir aussi