Bonjour à tous,
Cela fait 3 jours à temps complet que je cherches vainement
à faire l'interface avec un activeX et je suis au bout de tout
ce qu'il me semblait possible de faire.
J'ai essayé 2 méthodes que j'ai lu et relu dans plein d'exemple de
code sur github ou ailleurs mais la plupart du temps en C++ du coup
j'ai du mal à transformer en Delphi. (pour info je suis sous Delphi6)
voilà ce que j'essaye de faire, j'espère que je sera clair :
Première méthode utilisée:
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
23
24
25
26
27
28
29
30
31
32 const IID_IDeviceVoulu : TGUID = '{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'; type IDeviceVoulu = interface(IUnknown) ['{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'] function FonctionNum1(): HRESULT; stdcall; function FonctionNum2(): HRESULT; stdcall; end; implementation procedure UneAutreFonctionLocale(); var pDeviceVoulu: IDeviceVoulu; o : PObject; Dev : IMMDevice; begin if not Succeeded(Dev.ActivateIID_IDeviceVoulu, CLSCTX_INPROC_SERVER, nil, o)) then RaiseLastOSError; pDeviceVoulu:= o as IDeviceVoulu; // <<< ERREUR if not Succeeded(pDeviceVoulu.FonctionNum1()) then RaiseLastOSError; end;
Dans ce cas là il me répond : [Erreur] xxxx.pas(27): Types Incompatibles : 'IDeviceVoulu' et 'TObject'
Or j'ai lu partout que si on utilise un IInterface par GUID ça devrait fonctionner ???
Du coup, j'ai tenté de contourner le problème en créant un TDeviceVoulu intermédiaire ( là plus de souci
sur le "as" mais ailleurs...
Il me jette en me disant que les fonctions de l'interface sont manquantes dans la décalration du TDeviceVoulu, et si
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
23
24
25
26
27
28
29
30
31
32
33
34
35 const IID_IDeviceVoulu : TGUID = '{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'; type IDeviceVoulu = interface(IUnknown) ['{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'] function FonctionNum1(): HRESULT; stdcall; function FonctionNum2(): HRESULT; stdcall; end; TDeviceVoulu = class(TObject, IDeviceVoulu) // <<<<< ERREUR end; implementation procedure UneAutreFonctionLocale(); var pDeviceVoulu: TDeviceVoulu; o : PObject; Dev : IMMDevice; begin if not Succeeded(Dev.ActivateIID_IDeviceVoulu, CLSCTX_INPROC_SERVER, nil, o)) then RaiseLastOSError; pDeviceVoulu:= o as TDeviceVoulu; if not Succeeded(pDeviceVoulu.FonctionNum1()) then RaiseLastOSError; end;
je les ajoute, il me dit qu'elles, ne sont pas implémentés!! mais je ne peux pas les implémenter pusque justement
elles sont externes, je les récupère !! Ca se mord la queue.
Je suis bien conscient que je n'ai pas réussi du coup à saisir le mécanisme en jeu, et que je dois m'y prendre
comme une grosse nouille, alors si une âme charitable pouvait prendre 2 minutes pour m'expliquer ce que j'ai
pris de travers, je vous serais vraiment reconnaissant !!
Partager