Bonjour,
Voilà mon problème : j'ai un composant TMyImageList herité de TImageList . Voici l'arbre d'héritage :
Dans une DLL de manipulation des images j'assigne un TImageList à un TMyImageList :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 |-TPersistent |-... |-TCustomImageList |-TDragImageList |-TImageList |-TMyImageList
=> La procedure X (qui est dans la DLL) est appelée depuis un programme Y. En revanche le code suivant ne lève pas d'exceptions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure X(aMyImageList: TMyImageList); export; (...) procedure X(aMyImageList: TMyImageList); var anImageList: TImageList; begin anImageList := TImageList.create(nil); aMyImageList.Assign(anImageList); //lève l'exception : "Le projet Y a déclencher la classe d'exception EConvertError avec le message //'Impossible d'affecter TImageList à TMyImageList'" end;
Le problème est visible dans la VCL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure X(aMyImageList: TMyImageList); var vMyImageList: TMyImageList; anImageList: TImageList; begin anImageList := TImageList.create(nil); vMyImageList := TMyImageList.create(nil); aMyImageList.Assign(vMyImageList); end;
L'instruction assign appel "TCustomImageList.Assign(Source: TPersistent)" de imgList.pas (vcl) :
- Dans le 1er cas, "Source is TCustomImageList" retourne false .
- Dans le 2nd cas, "Source is TCustomImageList" retourne vrai.
Là je n'y comprend plus rien. Quelqu'un sait-il pourquoi aMyImageList n'est pas évaluer comme un descendant de TCustomImageList lorsqu'il n'est pas instancié dans la DLL??
(précision: ce code fonctionnait parfaitement avant la migration de Delphi7 vers Delphi XE)
merci d'avance pour votre aide.
Partager