2009-10-13 9 views
3

J'ai une DLL Delphi qui contient un formulaire qui utilise une variété de composants tiers. Cette DLL est utilisée par de nombreuses versions différentes de Delphi. Je compile les composants tiers dans la DLL. Je crois que j'ai encore besoin de lier à certains paquets Delphi "de base" comme rtl, vcl, etc, donc ma DLL utilisera le même gestionnaire de mémoire et d'autres ressources globales que l'IDE Delphi utilise. Comment puis-je savoir à quelle BPL j'ai besoin d'un lien?Détermination des packages d'exécution Delphi à inclure

Idéalement, je voudrais pointer un utilitaire sur ma DLL ou mon projet et avoir la liste de tous les BPL dont il dépendrait si je n'utilisais que BPL et n'avais aucun fichier source disponible. Ensuite, je pourrais voir cette liste et choisir les paquets que je veux charger à l'exécution. La liste actuelle donnée dans les propriétés du projet sous "Runtime Packages" est incomplète (car elle a été modifiée au fil des ans).

Répondre

5

Cochez la case "Générer avec les packages d'exécution", en laissant la liste complète des packages telle qu'elle est.

Faire un projet | Construire (ne pas compiler!). Une fois la génération terminée, utilisez Projet | Afficher les informations sur; la boîte de dialogue résultante vous donnera une liste des paquets réels que vous devez distribuer.

Après le commentaire de Jeremy à propos de la liste par défaut des paquets étant vide quand il permet la construction avec des paquets, voici la liste de cette boîte de dialogue Options de Delphi 2010:

vclx;vcl;vclimg;dbrtl;Rave77VCL;bdertl;rtl;vclactnband;xmlrtl; 
    vcldb;vcldbx;vcltouch;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib; 
    ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet; 
    intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;inetdb; 
    webdsnap;websnap;inetdbbde;inetdbxpress;soaprtl;vclribbon; 
    DbxCommonDriver;DbxClientDriver;DBXInterBaseDriver;DBXMySQLDriver; 
    dbexpress;dbxcds;SynEdit_R2009 
+0

Cela montre les paquets liés statiquement, mais si vous chargez un à l'exécution, il n'y a pas moyen d'obtenir cette information avec un outil d'analyse statique –

+1

Salut Ken, merci pour la réponse. J'utilise Delphi 2010. Il n'y a pas d'élément de menu Project | View Information, seulement le bouton OK pour fermer la boîte de dialogue de construction. Notez également mon commentaire que la liste actuelle des paquets d'exécution est incomplète (pour le moment, elle n'a que vcl dans la liste). –

+2

@Jeremy: Oui, il y a. C'est dans le menu Projet et activé après la construction. Cependant, il semble qu'ils aient légèrement modifié le texte du menu en "Information pour " dans ce menu. Pour clarifier, ce n'est * pas * dans le dialogue de construction; c'est dans le menu principal du projet de l'IDE après avoir fermé la boîte de dialogue de construction. –

8

Vérifiez un outil que j'ai écrit appelé « Obligatoire » - vous pouvez télécharger à partir de http://www.drbob42.com/tools

+0

Merci Bob.J'ai obtenu l'information dont j'avais besoin de l'IDE via le menu "Projet -> Information pour ", mais j'ai essayé votre utilitaire et cela a fonctionné aussi. :) –

+1

Hey, c'est bon de vous voir ici! –

0

"Cette DLL est utilisée par de nombreuses versions différentes de Delphi." Voulez-vous dire que vous avez des programmes écrits avec Delphi 7 et d'autres programmes écrits avec Delphi 2007, etc. qui utilisent la même DLL précompilée?

Dans ce cas, vous ne pouvez pas utiliser de packages pour partager des types d'objets et de la mémoire entre le programme et la DLL, car ils utiliseront des versions différentes des packages qui ne sont pas compatibles.

+0

La DLL contient des éditeurs de propriétés utilisés par différentes versions de Delphi. Mon paquet de temps de conception Delphi appelle dans la DLL. Je ne passe pas les types d'objets entre le paquet de temps de conception et la DLL, seulement les types "de base" comme les chaînes, les entiers, etc. Je crois parce que je passe des chaînes que j'ai besoin d'utiliser ShareMem. –

+0

Si vous transmettez des chaînes, alors oui, vous devrez utiliser ShareMem. Ensuite, il y a la question de savoir si l'IDE utilise également ShareMem. Si ce n'est pas le cas, vous ne pouvez pas passer de chaînes. Passez PAnsiChar ou PWideChar à la place. –

Questions connexes