Souclassement sans module standard

Soyez le premier à donner votre avis sur cette source.

Vue 4 870 fois - Téléchargée 679 fois

Description

Bonjour, certains d'entre nous avait pour habitude de dire qu'on ne pouvait pas faire de sousclassement sans passer par un module standard dans VB. Hors depuis tres longtemps j'avais envie de prouver le contraire c'est chose faite. Ce code vous permet de sousclasser n'importe quoi directement dans un module de classe, une form ou un controle utilisateur.

Les avantages :
- Modularité accrue (on ce rapproche du modele objet)
- Plus rapide qu'un code utilisant GetProp/SetProp
- Pas de transformation Pointeur/Objet generateur d'instabilité
- Permet de reduire le code et les dependances

Les inconvenients :
- Necesite une syntaxe particuliere
- Plus complexe a mettre en oeuvre (à coder)
- Ne pardonne aucune erreur en mode IDE (classique avec le sous classement)

Le zip contient plusieurs demonstration du principe pour des utilisation en classe, en form, en usercontrol ou bien encore en dll third party.

Conclusion :


Treve de "blabla" a tout ceux qui aime le subclassing je dis ... jetez vous dessus !!!

(je pense qu'on peux encore l'optimiser ! de plus il est tres facile a adapter dans votre propre code)

@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
Cool je vais voir la maj chez toi
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
j'ai ajouté un test (en mode IDE) qui s'assure que le code tourne (EbMode) et si on est en BreakPoint, on appelle la proc standard.
(ce code de test n'est pas greffé en mode compile)

au final, on peut debugger tranquille, et même presser le bouton STOP, sans que VB en crashes...

bref, ce que j'avais suggeré dans mon tout premier commentaire sur ta source.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
j'ai codé ce forward d'appel en C, puis j'ai modifié un tout petit peu le listing asm que m'a filé le compilateur de VS2005...

ça me donne donc 41 octets :

MovB Ofs, &H51 'push ecx
MovL Ofs, &H14244C8B 'mov ecx, DWORD PTR _lParam$[esp] (_lParam$=20)
MovL Ofs, &H1024548B 'mov edx, DWORD PTR _wParam$[esp] (_wParam$=16)
MovB Ofs, &H8D 'lea eax, DWORD PTR _RetValue$[esp+4] (_RetValue$=-4)
MovB Ofs, &H4
MovB Ofs, &H24
MovB Ofs, &H50 'push eax
MovL Ofs, &H1024448B 'mov eax, DWORD PTR _uMsg$[esp+4] (_uMsg$=12)
MovB Ofs, &H51 'push ecx
MovL Ofs, &H10244C8B 'mov ecx, DWORD PTR _hWnd$[esp+8] (_hWnd$=8)
MovB Ofs, &H52 'push edx
MovB Ofs, &H50 'push eax
MovB Ofs, &H51 'push ecx
MovB Ofs, &H68 'push 0x55555555
MovL Ofs, ObjPtr(x)
MovB Ofs, &HBA 'mov edx, 0x22222222
MovL Ofs, Ptr
MovB Ofs, &HFF 'call edx
MovB Ofs, &HD2
MovB Ofs, &H58 'pop eax
MovB Ofs, &HC2 'ret 16 ; 00000010H
MovB Ofs, &H10
MovB Ofs, &H0
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
ah... ouais, remarques, c'est assez logique...
enfin, j'étais content d'avoir (enfin) réussi a ce que ca plante pas :p => voir le coté positif ^^

ba, j'vais trouver autre chose...(où utiliser ton code :p)
là, j'appelais une fonction de mes objets (ISubClasser), donc j'ai pas a me soucier de l'emplacement de la procedure dans le code...
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
La pile c'est le plus long ! Car c'est un acces memoire + une incrementation/decrementation de registre. Donc moins il y en as mieu on ce porte.

Cela dit comme disait le grand maitre cinquante : "il ne faut presumer de rien"

@+
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.