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 :
jusque là, rien de rare et ça fonctionne bien.
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;
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 :
je cherche donc une piste pour l'écriture d'un collecteur conçu pour gérer ce type d'interface.
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;
merci par avance pour toutes vos suggestions
Partager