Bonjour,

j'utilise des ponteur de temps en temps, mais la je ne sais pas si on peut utiliser un pointeur sur une interface COM de la même façon.

Ma référence est VB.Net. Il y a une ListView dans laquelle chaque SubItems stocke dans sa propriété Tag une propriété OID :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Me.LvContact.Items(i).Tag = Me.TiersContact.OID
En Delphi j'ai utilisé dans le ListView :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
LvContact.AddItem(Nom, TObject(OID) );
pour stocker OID comme un objet associé, mais peut-être que je ne peux pas faire çà avec une interface COM ?

OID est défini dans VB par :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ReadOnly Property OID() As Objets100Lib.IBIObjectID
     Membre de Objets100Lib.IBIContact2
En Delphi l'extrait de la librairie de type correspondant est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
/ *********************************************************************//
// Interface :   IBIPersistObject
// Indicateurs : (4544) Dual NonExtensible OleAutomation Dispatchable
// GUID :        {667450D7-D2B9-45FE-BDB0-CAA1B137A243}
// *********************************************************************//
  IBIPersistObject = interface(IDispatch)
    ['{667450D7-D2B9-45FE-BDB0-CAA1B137A243}']
    function Get_OID: IBIObjectID; safecall;
    property OID: IBIObjectID read Get_OID;
  end;
Ensuite cette propriété est utilisée en VB :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Me.ContactCourant = BaseCpta.FactoryTiers.ReadNumero(Me.TiersCourant.CT_Num).FactoryTiersContact.Read(Me.LvContact.SelectedItems(0).Tag)
En Delphi j'ai fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
    ObjectID := IBIObjectID(lvContact.Selected.Data);
    FContactCourant := FBaseCpta.FactoryTiers.ReadNumero(FTiersCourant.CT_Num)
        .FactoryTiersContact.Read(ObjectID) as IBIContact2;
et la j'ai invariablement :

Exception déclenchée à $7C812AEB. Classe d'exception EAccessViolation avec message 'Violation d'accès à l'adresse 00407BAD dans le module 'Annuaire.exe'. Lecture de l'adresse FEEEFEF2'. Processus Annuaire.exe (3168)

Donc ma question est-ce qu'on peut associer une propriété d'une Interface COM à un objet ou faut-il procéder autrement ?