Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP [ Système / Exécution ] (gremlins13)

vendredi 10 octobre 2008 à 12:25:28 | Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

Bonjour,

1 semaine que je galère pour rendre compatibles sous XP des applications qui tournaient sans pb sous W2k ou W98SE, et développées en Delphi5.

Ces applications utilisent différentes Dll développées ici aussi en interne. Ces app refusent de démarrer sous XP,  aucun message, aucune erreur,  elles 'freezent' tout simplement dès le lancement.  Je reprends ces développement avec Delphi7 sous XP, histoire de recréer ces exécutables sur les OS de destination, mais je ne parviens pas à cerner l'origine du pb  j(ai positionné un max de points d'arret mais apparemment, l'exécution n'arrive même pas jusque là, donc j'en concluerais à un pb de gestion de mémoire.   Les applis utilisent 'Sharemem' en première position dans les Uses des projets.  J'ai également tenté de remplacer Sharemem par FastSharemem  mais sans meilleur résultat.  Je voudrais au moins comprendre le pb  avant de trouver une solution...  Je suis vraiment en galère, tout devant migrer vers XP dans le mois qui vient.

Hervé

vendredi 10 octobre 2008 à 19:30:25 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

rt15

Membre Club
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.

lundi 13 octobre 2008 à 08:52:08 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

Je vais passer mon lundi à tenter cette solution....  en priant que cela me donne au moins une idée de la piste à suivre.  Un autre forum m'a donné une autre idée, celle de l'appel à des api windows qui se feraient par leur numero et pas par leur nom.  Comme certains numéros ont changé parait-il entre w2k et XP...  
Je vais tester tout ça...

Merci  à plus

Hervé

lundi 13 octobre 2008 à 09:35:50 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

Rt15, Salut,

Je tente de réaliser ce que tu préconise en commande console,   j'ai bien une réponse au ntsd,  mais apres !!  ça se complique :  Voilà ce que j'obtiens

ntdll!DbgBreakPoint:
7c911230 cc               int     3
0:000> !dh x:launch.exe
*** WARNING: Unable to verify checksum for image00400000
*** ERROR: Module load completed but symbols could not be loaded for image00400000
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\user32.dll-
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\system32\GDI32.dll-
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\advapi32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\RPCRT4.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\oleaut32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\msvcrt.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\ole32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for X:\b
orlndmm.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\version.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\comctl32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\winspool.drv -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\shell32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\SHLWAPI.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\comdlg32.dll -
*** WARNING: Unable to verify checksum for X:\AtaDllPrint.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for X:\A
taDllPrint.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\olepro32.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\imm32.dll -
*** WARNING: Unable to verify checksum for X:\AtaDllUser.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for X:\A
taDllUser.dll -
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
INDOWS\system32\winmm.dll -
0:000>




Hervé

lundi 13 octobre 2008 à 09:43:43 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

rt15

Membre Club
Il faut lui donner le bon nom de module :

!dh image00400000

lundi 13 octobre 2008 à 10:10:55 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

rt15

Membre Club
Petites précisions :

Les messages d'erreurs que tu as ici sont normales : tu ne dispose effectivement pas des symboles de débogage des modules mentionnés. Mais ce n'est pas pas un problème.

Tu as l'air d'utiliser 3 dlls perso :
orlndmm.dll
AtaDllPrint.dll
AtaDllUser.dll

Il n'en manque pas ?

Un tuto sur ntsd.

lundi 13 octobre 2008 à 11:25:57 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

Non, il n'en manque pas,  il y en avait une quatrieme, que j'ai disséquée en unités incluses dans des uses,  il en reste  2  AtaDllPrint, ATADlluser.  Borlndll est en fait une dll Borland  qui est ajoutée automatiquement pour pouvoir utiliser sharemem entre autre

Hervé

lundi 13 octobre 2008 à 11:29:39 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

Voici le resultat :

0:000> !dh image00400000

File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
     14C machine (i386)
       9 number of sections
2A425E19 time date stamp Sat Jun 20 00:22:17 1992

       0 file pointer to symbol table
       0 number of symbols
      E0 size of optional header
    818E characteristics
            Executable
            Line numbers stripped
            Symbols stripped
            Bytes reversed
            32 bit word machine

OPTIONAL HEADER VALUES
     10B magic #
    2.25 linker version
  1A6000 size of code
  5E35B6 size of initialized data
       0 size of uninitialized data
  1A6E20 address of entry point
    1000 base of code
         ----- new -----
00400000 image base
    1000 section alignment
     200 file alignment
       2 subsystem (Windows GUI)
    4.00 operating system version
    0.00 image version
    4.00 subsystem version
  78F000 size of image
     400 size of headers
       0 checksum
00100000 size of stack reserve
00004000 size of stack commit
00100000 size of heap reserve
00001000 size of heap commit
       0 [       0] address [size] of Export Directory
  1AC000 [    2E04] address [size] of Import Directory
  1D2000 [   69A00] address [size] of Resource Directory
       0 [       0] address [size] of Exception Directory
       0 [       0] address [size] of Security Directory
  1B1000 [   200B0] address [size] of Base Relocation Directory
  23C000 [       1] address [size] of Debug Directory
       0 [       0] address [size] of Description Directory
       0 [       0] address [size] of Special Directory
  1B0000 [      18] address [size] of Thread Storage Directory
       0 [       0] address [size] of Load Configuration Directory
       0 [       0] address [size] of Bound Import Directory
       0 [       0] address [size] of Import Address Table Directory
       0 [       0] address [size] of Reserved Directory
       0 [       0] address [size] of Reserved Directory
       0 [       0] address [size] of Reserved Directory


SECTION HEADER #1
    CODE name
  1A5ED0 virtual size
    1000 virtual address
  1A6000 size of raw data
     400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60000020 flags
         Code
         (no align specified)
         Execute Read

SECTION HEADER #2
    DATA name
    3B0C virtual size
  1A7000 virtual address
    3C00 size of raw data
  1A6400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         (no align specified)
         Read Write

SECTION HEADER #3
     BSS name
     FA1 virtual size
  1AB000 virtual address
       0 size of raw data
       0 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000000 flags
         (no align specified)
         Read Write

SECTION HEADER #4
  .idata name
    2E04 virtual size
  1AC000 virtual address
    3000 size of raw data
  1AA000 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000040 flags
         Initialized Data
         (no align specified)
         Read Write

SECTION HEADER #5
    .tls name
      10 virtual size
  1AF000 virtual address
       0 size of raw data
       0 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0000000 flags
         (no align specified)
         Read Write

SECTION HEADER #6
  .rdata name
      18 virtual size
  1B0000 virtual address
     200 size of raw data
  1AD000 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
50000040 flags
         Initialized Data
         Shared
         (no align specified)
         Read Only

SECTION HEADER #7
  .reloc name
   200B0 virtual size
  1B1000 virtual address
   20200 size of raw data
  1AD200 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
50000040 flags
         Initialized Data
         Shared
         (no align specified)
         Read Only

SECTION HEADER #8
   .rsrc name
   69A00 virtual size
  1D2000 virtual address
   69A00 size of raw data
  1CD400 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
50000040 flags
         Initialized Data
         Shared
         (no align specified)
         Read Only

SECTION HEADER #9
  .debug name
  552BB6 virtual size
  23C000 virtual address
  552BB6 size of raw data
  236E00 file pointer to raw data
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
50000040 flags
         Initialized Data
         Shared
         (no align specified)
         Read Only


Debug Directories(0)
        Type       Size     Address  Pointer

0:000>



Hervé

lundi 13 octobre 2008 à 11:40:30 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

gremlins13

puis l'execution à l'adresse 005A6E20  :

0:000> bp 005A6E20
0:000> g
ModLoad: 762f0000 76300000   C:\WINDOWS\system32\WINSTA.dll
ModLoad: 6fee0000 6ff34000   C:\WINDOWS\system32\NETAPI32.dll
ModLoad: 77390000 77493000   C:\WINDOWS\WinSxS\x86_Microsoft.Win
rols_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll
ModLoad: 5de20000 5de28000   C:\WINDOWS\system32\rdpsnd.dll
ModLoad: 76ba0000 76bab000   C:\WINDOWS\system32\PSAPI.DLL
ModLoad: 74690000 746db000   C:\WINDOWS\system32\MSCTF.dll
ModLoad: 71a60000 71a72000   C:\WINDOWS\system32\MPR.dll
ModLoad: 75ef0000 75ef7000   C:\WINDOWS\System32\drprov.dll
ModLoad: 71b70000 71b7e000   C:\WINDOWS\System32\ntlanman.dll
ModLoad: 71c30000 71c47000   C:\WINDOWS\System32\NETUI0.dll
ModLoad: 71bf0000 71c30000   C:\WINDOWS\System32\NETUI1.dll
ModLoad: 71be0000 71be7000   C:\WINDOWS\System32\NETRAP.dll
ModLoad: 71b50000 71b63000   C:\WINDOWS\System32\SAMLIB.dll
ModLoad: 75f00000 75f09000   C:\WINDOWS\System32\davclnt.dll
ModLoad: 77b50000 77b72000   C:\WINDOWS\system32\appHelp.dll
ModLoad: 76f80000 76fff000   C:\WINDOWS\system32\CLBCATQ.DLL
ModLoad: 77000000 770d4000   C:\WINDOWS\system32\COMRes.dll


Et l'application reste plantée là ....   :(


lundi 13 octobre 2008 à 12:27:56 | Re : Application developpée sous W2k en Delphi 5, et reprise en Delphi 7 pour XP

rt15

Membre Club
borlndmm -> Ah vi j'avais zapé le b et je l'avais donc pas reconnu.

"Et l'application reste plantée là ....   :("
Elle boucle (Consommation CPU importante) ?, elle plante (Dispariation du gestionnaire des tâches) ?, elle est gelée (Consommation CPU nulle mais présente dans le gestionnaire des tâches) ?

Bon, le problème a donc lieu avant l'appel du point d'entré de l'exe. Sachant que les points d'entrées des dlls sont appelés entre le point d'arrêt initial et l'exécution du point d'entrée de l'exe :

When the debugger starts a new target application, an initial breakpoint automatically occurs after the main image and all statically-linked DLLs are loaded but before any DLL initialization routines are called.

Tu peux mettre des points d'arrêts au points d'entré de tes dlls de la même manière que ce que tu as fait pour l'exe, à ceci près que les dlls sont pas forcément chargées à l'emplacement spécifié dans le header.

Il faut que tu tapes la commande lmi sans argument. Là tu as la liste des modules chargé et les adresses où ils sont chargés :

start    end        module name
01000000 01014000   notepad      (deferred)

Ici, le module notepad est chargé à l'adresse 01000000 (Jusqu'à l'adresse 01014000, mais ce n'est pas le problème).

Avec lmi tu récupère l'adresse des dlls qui t'intéressent (Les tiennes + borlndmm).

Puis tu utilises !dh sur chacunes de ces dlls pour récupérer le point d'entré. Tu additionne le point d'entrée avec l'adresse de chargement comme pour l'exe, et tu mets des points d'arrêt à ces adresses.

De cette manière, tu devrais parvenir à déterminer quelle dll pose problème.

Tu peux aussi essayer de chercher dllproc dans le source de tes dlls en Delphi : c'est à l'aide de cette variable que l'on spécifie à Delphi quelle fonction est le point d'entrée de notre dll.


1 2

Cette discussion est classé dans : pb, application, xp, delphi, w2k


Répondre à ce message

Sujets en rapport avec ce message

pb avec bd access [ par drew00 ] bonjour,j ai realise une application sous delphi qui fait appel a une base de donnees access.J'ai installé mon application sur un autre poste qui ne p Rave Report [ par fabr1 ] fab1,J'ai un pb avec Delphi et Rave Report.Lorsque je lance un report depuis mon application Delphi, j'ai un problème lorsque je quitte mon applicatio pb delphi et paradox? [ par kadim69 ] salut tout le monde, je suis entrain de dvpé une application de gestion sous delphi 6 entreprise avec une base paradox local via bde. le pb qd je lanc Traducteur Delphi please ! [ par minipod ] Un sympatique delphinaute m'a dit de faire ceci pour résoudre mon problème. Le problème c'est que je sais pas faire çà en Delphi. Est-ce que quelqu'un Curseur [ par MAsterC ] Bonjour!Delphiprog avait déja répondu a cette question au niveau des changements de curseurs pour Delphi!Regarder :Tu sauvegardes le curseur dans un f Document word dans application Delphi [ par Kenny ] Salut,Je cherche à ouvrir l'application word dans un formulaire DELPHI.En fait, je développe une partie d'un programme développé en DELPHI et je dois Overlay des unité dans Delphi [ par nc2ufr ] Bonjour à tous.Je me trouve confronter au problème suivant et je cherche désespérément une solution simple.Je travaille sur une application assez volu A propos des controles clavier [ par facosh ] Bonjour a toutes et a tous.Tout d'abord, je vais situer dans quel cadre je veux utiliser ce que je veux demander. Je veux réaliser une application en comment "locker" le tiroir d'un cd-rom en delphi sous XP [ par hendrix ] Bonjour à tous,Je cherche du code en delphi pour empêcher l'ouverture d'un lecteur de CD-rom sous windows XP.Je cherche également du code en delphi p Lancer une application externe à partir click souris [ par geronimojr ] Bonjour,Je disirerais exécuter une fonctionalité d'une application externe à l'aide de mon application Delphi ...Me m'explique : je voudrais que mon p


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.