IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

execution d'un prog 32 bits sous Windows 64 bits


Sujet :

Visual C++

  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut execution d'un prog 32 bits sous Windows 64 bits
    Bonjour

    Je suis sous Windows 7 64 bits.
    Je suis confronté à un problème très curieux :
    D'abord j'ai écrit un exé avec les MFC compilé en win32. Il fonctionne parfaitement.
    J'ai écris une dll 64 bits qui permet d'ajouter une ligne dans un menu contextuel de fichier dans l'explorer.
    Cette dll fonctionne bien si je clique sur la ligne et que j'affiche par exemple le nom du fichier sélectionné.
    Par contre, lorsque je clique, si je veux exécuter à l'aide de createprocess l'exé susdit, j'obtiens l'erreur "998. L'accès à cet emplacement mémoire n'est pas valide'.
    Il semble que le système ne puisse pas charger l'exé alors que ça fonctionne bien lorsque je fais un double click dessus.

    Autre chose curieuse : si je le lance avec Windbg il s'arrète avec ces lignes :
    0:000> g
    ModLoad: 00000000`76f80000 00000000`7709f000 WOW64_IMAGE_SECTION
    ModLoad: 00000000`76120000 00000000`76230000 WOW64_IMAGE_SECTION
    ModLoad: 00000000`76f80000 00000000`7709f000 NOT_AN_IMAGE
    ModLoad: 00000000`77560000 00000000`7765a000 NOT_AN_IMAGE
    ModLoad: 00000000`76120000 00000000`76230000 C:\Windows\syswow64\kernel32.dll
    ModLoad: 00000000`762d0000 00000000`76316000 C:\Windows\syswow64\KERNELBASE.dll
    ModLoad: 00000000`769d0000 00000000`76ad0000 C:\Windows\syswow64\USER32.dll
    ModLoad: 00000000`750a0000 00000000`75130000 C:\Windows\syswow64\GDI32.dll
    ModLoad: 00000000`76840000 00000000`7684a000 C:\Windows\syswow64\LPK.dll
    ModLoad: 00000000`76930000 00000000`769cd000 C:\Windows\syswow64\USP10.dll
    ModLoad: 00000000`763b0000 00000000`7645c000 C:\Windows\syswow64\msvcrt.dll
    ModLoad: 00000000`76ad0000 00000000`76b70000 C:\Windows\syswow64\ADVAPI32.dll
    ModLoad: 00000000`76460000 00000000`76479000 C:\Windows\SysWOW64\sechost.dll
    ModLoad: 00000000`76750000 00000000`76840000 C:\Windows\syswow64\RPCRT4.dll
    ModLoad: 00000000`74f20000 00000000`74f80000 C:\Windows\syswow64\SspiCli.dll
    ModLoad: 00000000`74f10000 00000000`74f1c000 C:\Windows\syswow64\CRYPTBASE.dll
    ModLoad: 00000000`73860000 00000000`73865000 C:\Windows\SysWOW64\MSIMG32.dll
    ModLoad: 00000000`76320000 00000000`7639b000 C:\Windows\syswow64\COMDLG32.dll
    ModLoad: 00000000`76270000 00000000`762c7000 C:\Windows\syswow64\SHLWAPI.dll
    ModLoad: 00000000`71070000 00000000`7120e000 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\COMCTL32.dll
    ModLoad: 00000000`75410000 00000000`7605a000 C:\Windows\syswow64\SHELL32.dll
    ModLoad: 00000000`72b30000 00000000`72b81000 C:\Windows\SysWOW64\WINSPOOL.DRV
    ModLoad: 00000000`76d60000 00000000`76ebc000 C:\Windows\syswow64\ole32.dll
    ModLoad: 00000000`76ec0000 00000000`76f4f000 C:\Windows\syswow64\OLEAUT32.dll
    ModLoad: 00000000`737e0000 00000000`737fc000 C:\Windows\SysWOW64\oledlg.dll
    ModLoad: 00000000`71230000 00000000`713c0000 C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80\gdiplus.dll
    ModLoad: 00000000`713c0000 00000000`713fc000 C:\Windows\SysWOW64\OLEACC.dll
    ModLoad: 00000000`751a0000 00000000`75200000 C:\Windows\syswow64\IMM32.dll
    ModLoad: 00000000`76850000 00000000`7691c000 C:\Windows\syswow64\MSCTF.dll
    ModLoad: 00000000`73820000 00000000`73852000 C:\Windows\SysWOW64\WINMM.dll
    (2028.1cf4): WOW64 breakpoint - code 4000001f (first chance)
    First chance exceptions are reported before any exception handling.
    This exception may be expected and handled.
    ntdll32!LdrpDoDebuggerBreak+0x2c:
    778e0fab cc int 3
    Si vous avez une explication je suis preneur.
    Merci

    PS Ce problème semble être en rapport avec ceci mais j'avoue que je ne comprends pas tout
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Je pense que vous avez tout simplement un bug dans votre programme.

    Les traces ne montrent que le fait que le programme a atteint un point d'arrêt (cc int 3).

    Vous pouvez utiliser un débuggeur comme VS même avec les extension shell, non ?

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'ai surement un bug, mais où ?
    Le debugueur VS ne trouve rien, et en mode direct (avec l'explorateur Windows) , si je faiss un double click sur l'exé tout fonctionne bien !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je viens d'essayer un faisant un programme Windows Form et là pas de problème !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Si je comprends bien, tu as créé un Shell Extension 64bit et dans cette DLL tu fais un CreateProcess d'un exe 32bit. C'est ça ?

    C'est impossible de charger une DLL 32bit dans un exe 64bit et vis versa. Mais là, c'est bizarre que ton exe 64bit (l'explorateur) ne puisse pas lancer un exe 32bit. Il me semble que Notepad++ est 32bit et on n'a pas de souci pour le lancer sous 7 x64.

    Peux-tu essayer autre chose que CreateProcess ? Style ShellExecute ou _spawnl ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Si je comprends bien, tu as créé un Shell Extension 64bit et dans cette DLL tu fais un CreateProcess d'un exe 32bit. C'est ça ?
    Oui, c'est ça, je suis sous Windows 7 64 bits.

    Avec ShellExecute il me dit que le fichier est introuvable !
    _spawnl pas essayé

    Je résule les problème :
    exe compile 32 bits :
    • aucun problème avec double click dans l'explorateur
    • aucun problème en debug avec VS2010
    • ne se lance pas avec Windbg
    • ne se lance pas avec la dll Extension Shell


    exe compile 64 bits :
    • aucun problème avec double click dans l'explorateur
    • aucun problème en debug avec VS2010
    • se lance avec Windbg
    • ne se lance pas avec la dll Extension Shell


    J'ai forcément un bug quelque part ???

    j'ai lu que les MFC avaient des problèmes, est-ce vrai ou est-ce une légende urbaine ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    On va reprendre depuis le début.

    Mettez-vous en situation de plantage mais avec un AutoDumpPlus attaché à votre explorateur.

    Les Dump devraient indiquer la source du problème.

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    Je ne sais pas si ca peut aider, mais notepad++ se lance bien via CreateProcess :
    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
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = iShowCmd;    //SW_RESTORE;
    if (!CreateProcess (NULL, pszCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
        DWORD errorCode = GetLastError();
        if (errorCode == ERROR_ELEVATION_REQUIRED) {    //Fallback to shellexecute
            CoInitializeEx(NULL, 0);
            HINSTANCE execVal = ShellExecute(NULL, TEXT("runas"), pszCommand, NULL, NULL, iShowCmd);
            CoUninitialize();
            if (execVal <= (HINSTANCE)32) {
                // affichage erreur
            }
        } else {
            // affichage erreur
        }
    }

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Ne louvoyez pas, prenez le problème de front, générez les dumps.

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Merci du consiel, je rentre et je m'y mets
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Avec adplus j'obtiens un code d'exception 0x80000007.
    Citation Envoyé par MSDN
    The system debugger was awakened by an interrupt.
    Sympa, merci
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Vous êtes sur la bonne voie. ;-) :
    http://www.tech-archive.net/Archive/.../msg00195.html

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Résolu, mais il reste des mystères.
    Dans ma dll, je faisais afficher avec des messages box le nom de l'exé et les arguments de lancements et c'est ça qui faisait planter la dll.
    Je ne fais plus rien afficher et maintenat ça fonctionne bien.
    Au moins j'aurais appris à me servir de débuggueur autres que celui de Visual C.

    (Les mystères, c'est que ça fonctionnait avec le prog Windows Form).

    Merci de votre aide
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Vos problèmes semblent liés au moment du chargement d'une Dll.
    Avec votre indice supplémentaire, il semble que c'et une Dll graphique.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je lance une simple boîte de dialogue !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 141
    Points : 12 242
    Points
    12 242
    Par défaut
    Rien n'est vraiment simple.
    Qui dit boite de Dialogue dit ressources, dit composant d'affichage, hook de fenêtre etc...

  17. #17
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Oui tout à fait.
    Simplement, il faut que je précise (car j'ai l'impression que je me suis mal expliqué dans un post précédent), qu'avant de lancer mon exécutable (celui qui avait donc un problème) par ShellExecute (ou CreateProcess), j'affichais le chemin de cet exécutable et l'argument passé dans 2 boites de dialogue. C'est depuis que j'ai supprimé cet affichage que tout fonctionne parfaitement.
    Maintenant que ce problème est résolu je crois avoir lu, dans une vie intérieure, qu'il fallait éviter justement les boites de dialogue dans les menus contextuels, ce qui semble se confirmer, mais peut-être que je me trompe.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2014, 16h02
  2. Compiler le plug-in Oracle 64 bit sous Windows 64 bit avec Qt 4.3
    Par mercure07 dans le forum Bases de données
    Réponses: 0
    Dernier message: 23/01/2014, 10h17
  3. Réponses: 2
    Dernier message: 23/07/2013, 23h41
  4. CF10 32 bits sous Windows 64 bits ?
    Par PoY dans le forum Coldfusion
    Réponses: 1
    Dernier message: 29/10/2012, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo