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

C Discussion :

Adaptation d'un programme C 32 bits en 64 bits


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Adaptation d'un programme C 32 bits en 64 bits
    Bonjour,

    Je poste parce que j'ai essayé pleins de choses, et je n'arrive pas à poursuivre mon projet. Voici mon problème :

    Je dois adapter un programme C compatible Windows 32 bits, pour qu'il s'exécute sur Windows 64 bits. Je compile dans Visual Studio 2010, et utilise plusieurs librairies telles que sqlite3 et zlib notamment ainsi que des dll maison, que j'ai bien compilées en 64 bits pour que ça fonctionne.
    Actuellement, mon programme en 32 bits s'exécute correctement sur ma VM 64 bits (normal). Je pourrais laisser les choses comme ça (vu que le 32 bits fonctionne sur le 64), mais il faut vraiment que je l'adapte.
    J'ai effectué les modifications en rapport avec le registre (clés au bon endroit), mais sûrement que dans le code il faut que je modifie d'autres choses.

    Quand je précise dans Visual Studio que je veux compiler en 64 bits (machine cible et gestionnaire de configuration), le programme me met une erreur "L'application n'a pas réussi à démarrer correctement (0x000007b) Cliquez sur OK pour fermer l'application".
    Après quelques recherches, j'ai vu que c'était en rapport avec 32/64, et éventuellement des dll qui ne sont pas en 64, mais je ne sais pas lesquelles.

    J'espère avoir été assez claire et précise sur mon souci. Merci à tous ceux qui auraient quelques solutions à m'apporter.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 374
    Points : 23 631
    Points
    23 631
    Par défaut
    Bonjour et bienvenue,

    Obtiens-tu réellement « 0x000007b » ou s'agit-il en fait de « 0xc000007b » ?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    C'est 0xc000007b effectivement...

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Après d'autres essais (solutions proposées sur Internet), et encore quelques recherches, j'ai finalement comparé le déroulement de l'exécution de la release du programme dans Visual Studio, entre les deux versions 32 bits et 64 bits. Et il y a des différences au niveau des DLL chargées !

    Notamment celles-ci :

    - advapi32.dll
    - sechost.dll
    - rpcrt4.dll
    - sspicli.dll
    - cryptbase.dll


    Ces Dll existent pourtant dans le répertoire C:\Windows\System32\ !

    Je ne comprends pas pourquoi elles ne sont pas chargées, alors que je n'ai rien changé au code...

    Peut-être cette problématique serait plus simple pour m'aider à comprendre..

    Anyone ?

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Tu es bien sur un windows 64 bits?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Oui je suis bien sur Windows 7 64 bits. J'ai un peu plus d'infos :

    J'ai utilisé dependency walker et j'ai ComCTL32.dll qui est utilisée en x86 alors que je l'ai bien en x64...


    Mon problème est bien résumé ici :

    http://stackoverflow.com/questions/24148196/incorrect-comctl32-dll-is-loaded-after-porting-a-project-from-win32-to-x64-platf


    Mais même en modifiant les propriétés de mon fichier manifest, j'ai toujours une erreur "côte-à-côte".

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    J'ai finalement trouvé mon erreur, et mon programme s'ouvre bien :

    Il fallait modifier le fichier .manifest du dossier projet (directement à la mano), pour lui préciser que je suis en x64 : processorArchitecture='amd64'

    J'espère que ça pourra aider du monde.

    C'est donc résolu.

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

Discussions similaires

  1. Adaptation d'un programme au 64 bit
    Par nibledispo dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/10/2014, 18h45
  2. Réponses: 3
    Dernier message: 18/02/2012, 03h05
  3. Adaptation d'un programme C# en ASP.net
    Par cbr954 dans le forum ASP.NET
    Réponses: 14
    Dernier message: 26/03/2010, 17h50
  4. Programme compilé en 32 bits ou 64 bits
    Par oranoutan dans le forum C
    Réponses: 30
    Dernier message: 10/05/2007, 16h14
  5. Un programme en assembleur qui indique le bit de parité
    Par bsamah dans le forum Assembleur
    Réponses: 3
    Dernier message: 21/02/2006, 13h32

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