Salut,
Zarbi. Delphi 7 incompatible avec
Vista XP ce serait une première. Et XP et 2000 ont une architecture vraiment semblable.
Sharemem est assez peu utilisée (surtout du fait que cela rend les dll incompatible avec les .exe des autres langages), mais quand même, de là à ce viander...

Pour le coup des points d'arrêt qui ne passe pas... Les .exe et .dll ont un point d'entrée exécuté par le loader (Appelons ça un main pour les .exe et un dllmain pour une dll) de Windows quand il charge un .exe en mémoire.
Si tu ne parviens pas à mettre en place un point d'arrêt dans ton .exe, cela peut être dû au fait qu'une dll ne parvienne pas à se charger à cause d'un mauvais code dans son dllmain. Néanmoins il me semble que dans ce cas là, windows affiche un message explicite, style le module ne peut être chargé, ou est introuvable.
Pour tester l'initialisation de tes dlls, tu peux faire un test relativement simple. Dans une console tu tape :
ntsd MonExeATester.exe
En faisant l'hypothèse que la console puisse trouver ton .exe.
Cela t'affichera la liste des dlls chargées et l'exécution s'arrêtera avant l'exécution du point d'entrée de l'exe.
ntsd devrait te donner la main en affichant ça :
ntdll!DbgBreakPoint:
7c911230 cc int 3
0:000>
Pour complèter le test tu peux aller jusqu'au point d'entrée du .exe en tapant :
!dh NomDuModule.exe
Tu peux y trouver le point d'entrée et l'adresse de l'image :
739D address of entry point 1000 base of code
----- new -----
01000000 image base
Tu met un point d'arrêt avec la commande bp, à l'adresse du point d'entrée. Pour avoir l'adresse du point d'entrée, il suffit d'additionner l'adresse de l'image et du point d'entrée. Ici :
bp 0100739D
Puis tu lance l'exécution avec g :
g
ntsd devrait te rendre la main à l'adresse du main. Tu peux éventuellement poursuivre l'exécution avec g... Mais je suppose que ton programme aura merdé avant.
Bon courage.