IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Problème de compatibilité lors d'une migration sous Delphi 6

Date de publication : 01/01/2001 , Date de mise à jour : 02/11/2005

Par DelphiCool (Site)
 

Souvent en installant un composant, destiné à l'origine pour une version antérieure à Delphi 6, on rencontre un problème de compatibilité.



Dans ce cas lors d'une migration on reçoit le message d'erreur suivant:
[Fatal Error] DECReg.pas(19): File not found: 'DsgnIntf.dcu'
Et l'unité DsgnIntf dans la clause uses, est surlignée. Il sagit d'un ancien nom, qui n'est plus utilisé dans Delphi 6.
Un petit tour dans l'aide en ligne, et l'on s'aperçoit qu'il faut maintenant ajouter, d'autres unités.

declarations avant :
uses
 DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
 DsgnIntf, Cipher1, RFC2289;
déclarations après modification :
uses
 DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
 DesignEditors, VCLEditors, RTLConsts,
 Cipher1, RFC2289;
Les unités se trouvent dans le dossier [Delphi]\Source\ToolsAPI
S'il vous faut proxies.pas, le voici.

Nous recompilons le paquet ou le composant, et dans certain cas on s'aperçoit que ce n'est pas encore fini.
D'autres erreurs de compilation apparaissent :
[Error] DECReg.pas(30): Undeclared identifier: 'TPropertyAttributes'
[Error] DECReg.pas(66): Undeclared identifier: 'paReadOnly'
[Error] DECReg.pas(66): Undeclared identifier: 'paValueList'
[Error] DECReg.pas(66): Undeclared identifier: 'paMultiSelect'
[Error] DECReg.pas(105): Undeclared identifier: 'paValueList'
[Error] DECReg.pas(105): Undeclared identifier: 'paMultiSelect'
[Error] DECReg.pas(116): Undeclared identifier: 'paValueList'
[Error] DECReg.pas(116): Undeclared identifier: 'paMultiSelect'
[Error] DECReg.pas(160): Undeclared identifier: 'RegisterPropertyEditor'
[Fatal Error] Crypto.dpk(33): Could not compile used unit 'Source\DECReg.pas'
C'est énervant à la fin. :-o
Rien de bien grave, on regarde où est le problème, il est sur cette ligne :
 function GetAttributes: TPropertyAttributes; override;
Je recherche dans l'aide en ligne, le mot TPropertyAttributes, et je ne trouve pas dans quelle unité cette classe est déclarée, mince.
Approfondissons du coté de l'unité dsgnintf, et l'on trouve ceci :
...pour obtenir la véritable interface IDesigner à partir d'une instance de IDesignerHook.
IDesignerHook nécessite uniquement la disponibilité des classes et des fiches.
IDesigner a besoin de DesignIntf, qui inclut de nombreux autres paquets, dont certains 
peuvent ne pas être redistribuables.
Il faut donc mettre l'unité DesignIntf dans nos déclarations, essayons.
Notre code ressemble à ceci :
uses
 DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
 DesignIntf,
 DesignEditors, VCLEditors, RTLConsts,
 Cipher1, RFC2289;
Bon ça marche, mais on a cette boîte de dialogue qui apparait :

Effectivement, j'ai vu, dans l'aide, qu'il fallait ajouter Designide dans le paquet.
Cliquons oui.
Recompilons le paquet, humm pas d'erreur :-D.
Installons le paquet, youpiiii, cela fonctionne correctement.

En Bref :
Voici les déclarations de départ :
uses
 DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
 DsgnIntf, Cipher1, RFC2289;
Voici les déclarations d'arrivées :
uses
 DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
 DesignIntf,
 DesignEditors, VCLEditors, RTLConsts,
 Cipher1, RFC2289;
PS : il est à noter que ces deux unités : VCLEditors, RTLConsts ne sont pas toujours nécessaire dans le paquet. Dans mon cas, elles ne le sont pas, alors au lieu d'encombrer mon paquet, je les enléve, et mes déclarations finales ressemblent à ceci:
uses
DECConst, DECUtil, Hash, Cipher, HCMngr, SysUtils, Classes,
DesignIntf,
DesignEditors,
Cipher1, RFC2289;
DelphiCool


Valid XHTML 1.1!Valid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005 DelphiCool. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.