bonjour,

j'écris un petit client automation qui gère les méthodes et les propriétés d'un serveur fourni avec sa bibliothèque de types que j'ai importée.
comme je voulais pouvoir définir une instance déjà en cours du serveur en liaison précoce, j'ai complété l'unité _TLB avec une fonction Get :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CoDocument = class
    class function Create: IDocument;
    class function CreateRemote(const MachineName: string): IDocument;
 
    class function Get:  IDocument;
 
  end;
 
implementation
 
class function CoDocument.Get: IDocument;
var
lRes:HRESULT;
Unk:IUnknown;
Doc:IDocument;
begin
   lRes:=GetActiveObject(CLASS_Document,nil,Unk);
   OleCheck(lRes);
   lRes:=Unk.QueryInterface(IDocument,Doc);
   OleCheck(lRes);
   Result:=Doc;
end;
jusque là, rien de rare et ça fonctionne bien.

c'est la gestion des événements qui me laisse perplexe.
je dois écrire à la main le collecteur d'événements puisque D4 ne génère pas de composant enveloppe lors de l'import.
malheureusement, je découvre que les interfaces événements ne sont pas des interfaces de répartition mais des interfaces
de type IUnknown :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
IDocumentEvents = interface(IUnknown)
    ['{xxxxxxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxx}']
    function Close: HResult; stdcall;
    function DocSaved(const pIDoc: IDocument): HResult; stdcall;
    function MergeRequest(code: Integer): HResult; stdcall;
  end;
je cherche donc une piste pour l'écriture d'un collecteur conçu pour gérer ce type d'interface.

merci par avance pour toutes vos suggestions