INTERCEPTER DES APPELS DE METHODE (SURCHARGE DE VTABLE)

hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 - 5 mai 2007 à 11:57
RAFAAJ2000 Messages postés 16 Date d'inscription samedi 27 mars 2010 Statut Membre Dernière intervention 30 décembre 2012 - 7 avril 2010 à 08:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42574-intercepter-des-appels-de-methode-surcharge-de-vtable

RAFAAJ2000 Messages postés 16 Date d'inscription samedi 27 mars 2010 Statut Membre Dernière intervention 30 décembre 2012
7 avril 2010 à 08:20
Merci de votre reponse.
En fait, j'ai reussi a faire ca avec excel mais je voudrais savoir comment appeller la Method originale apres l'interception. Est ce que vous savez comment le faire ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 mars 2010 à 06:19
pas le même espace mémoire... dangereux de jouer à ça avec une appli tierce
RAFAAJ2000 Messages postés 16 Date d'inscription samedi 27 mars 2010 Statut Membre Dernière intervention 30 décembre 2012
27 mars 2010 à 09:35
J'ai essayé le code pour changer la Caption de l'application Excel lui mais ca ne marche pas.

J'ai passé le nombre 72 correspondant à la Propriéte Caption d'Excel que j'ai cherché dans le OLEViewer mais ca marche pas.

La function "OverrideCaption" ne semble pas s'executer.

Peut etre que je me suis trompé de numero de propriété .

Y a t-il quelqu'un qui puisse m'aider . Merci bcp.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mai 2007 à 08:53
Pour les besoins que j'en ais, j'utilise pour surcharger :


Public Declare Function SetWindowTextW Lib "user32.dll" (ByVal hWnd As Long, ByVal lpString As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Function OverrideCaption(ByVal voObjPtr As Long, ByVal vsCaption As Long) As Long
Dim oForm As Form
'# On récupère un objet a partir du pointeur This (voir doc sur COM...)
CopyMemory oForm, voObjPtr, 4
'# On met a jour le caption.... via WM_SETTEXT
SetWindowTextW oForm.hWnd, vsCaption
'# On libère notre objet
CopyMemory oForm, 0&, 4
End Function


ainsi, visuellement, aucun changement notable... mais WM_SETTEXT est envoyé, désormais.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mai 2007 à 08:51
certes...
pas utile dans mon cas, mais pourrait être utile...
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
6 mai 2007 à 16:22
Par contre ya pas l'explication pour appeler la methode originale apres l'interception :p
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
5 mai 2007 à 23:41
Ok, merci pour les précisions.

@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 mai 2007 à 23:24
Ole Viewer peut aider...

ensuite, tu compte 3 methodes pour IUnknown et 4 pour IDispatch ...
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
5 mai 2007 à 17:21
Impressionant... vraiment...

Mais comment connait-on le nombre 21 correspondant à la property caption ? Si on veut faire pareil avec une autre property, on doit chercher la valeur par tatonnement ?

@+
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
5 mai 2007 à 11:57
encore un truc de dingue...
mes respects
Rejoignez-nous