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

Qt Creator Discussion :

Migration de GCC vers Visual C++


Sujet :

Qt Creator

  1. #1
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut Migration de GCC vers Visual C++
    Bonjour,

    voici mon problème, mon code marchait très bien mais vu que mon programme utilisait plus de 1,4Go de ram je suis obligé de passer en 64bit mais qt n'est pas compatible avec MinGW 64bit donc je suis obligé de passe à msvc 2015 64bit et ce compilateur me trouve des erreurs que je n'avais pas sous MinGW 32bit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReadProcessMemory(handle, memory_information.BaseAddress + h*page_size, buffer_structure.buffer, sizeof(buffer_structure.buffer), NULL);
    C:\Programming\Light Punch\AI\environnement\read_memory.cpp:195: erreur : C2036: 'PVOID'ÿ: taille inconnue

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *error = "database is not open";
    sqlite3_exec(db, sql.c_str(), callback, (void*)this->database_number, &error);
    C:\Programming\Light Punch\AI\ai\database.cpp:251: erreur : C2440: 'initialisation'ÿ: impossible de convertir de 'const char [21]' en 'char *'

    Quelqu'un aurait-il une solution ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Matthieu76 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReadProcessMemory(handle, memory_information.BaseAddress + h*page_size, buffer_structure.buffer, sizeof(buffer_structure.buffer), NULL);
    C:\Programming\Light Punch\AI\environnement\read_memory.cpp:195: erreur : C2036: 'PVOID'ÿ: taille inconnue
    L'erreur est relative au type PVOID = void*. void désigne l'absence même de type. On ne peut donc tout naturellement pas mesurer la taille d'un type qui n'existe pas.
    Or lorsque tu écrits memory_information.BaseAddress + h*page_size, tu souhaites en fait te déplacer de h*page_size fois cette taille inconnue.
    Cela « fonctionnait » sur GCC car c'est une extension, mais tu dois avoir tout de même un avertissement :
    warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
    ou si ce n'est pas le cas, revois tes options de compilation à la hausse (-pedantic -Wall -Wextra au minimum).
    Citation Envoyé par Matthieu76 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *error = "database is not open";
    sqlite3_exec(db, sql.c_str(), callback, (void*)this->database_number, &error);
    C:\Programming\Light Punch\AI\ai\database.cpp:251: erreur : C2440: 'initialisation'ÿ: impossible de convertir de 'const char [21]' en 'char *'
    Une chaîne de caractères écrite en dur telle que "database is not open" (de type const char [21] comme tu peux le voir dans le message d'erreur) n'est PAS modifiable. Tu ne peux donc pas stocker son adresse dans un char* mais dans un char const * :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char const * error = "database is not open";
    Mais cela ne convient pas à l'utilisation de sqlite3_exec :
    If an error occurs while evaluating the SQL statements passed into sqlite3_exec(), then execution of the current statement stops and subsequent statements are skipped. If the 5th parameter to sqlite3_exec() is not NULL then any error message is written into memory obtained from sqlite3_malloc() and passed back through the 5th parameter. To avoid memory leaks, the application should invoke sqlite3_free() on error message strings returned through the 5th parameter of sqlite3_exec() after the error message string is no longer needed. If the 5th parameter to sqlite3_exec() is not NULL and no errors occur, then sqlite3_exec() sets the pointer in its 5th parameter to NULL before returning.
    Ce 5e paramètre est de type char **errmsg et c'est à la fonction qu'incombe la tâche de fixer le message d'erreur le cas échéant, NULL sinon. Ce n'est pas à toi de lui donner ce message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char * error_message = NULL;
    if ( sqlite3_exec(db, sql.c_str(), callback, (void*)this->database_number, &error_message) != SQLITE_OK ){
        // Erreur, description de l'erreur contenue dans error_message
        sqlite3_free(error_message);
    } else {
        // OK
    }

  3. #3
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Merci beaucoup pour ton aide, j'ai corrigé ce problème mais mainteant j'ai ce type de promblème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    controler.obj:-1: erreur : LNK2019: symbole externe non résolu __imp_keybd_event référencé dans la fonction "public: static void __cdecl Controler::advance(int)" (?advance@Controler@@SAXH@Z)
    data_recovery.obj:-1: erreur : LNK2019: symbole externe non résolu __imp_SetForegroundWindow référencé dans la fonction "public: void __cdecl Data_recovery::find_values(int)" (?find_values@Data_recovery@@QEAAXH@Z)
    read_memory.obj:-1: erreur : LNK2001: symbole externe non résolu __imp_SetForegroundWindow
    J'ai l'impression que "windows.h" n'est pas reconnu ou qu'il manque des liens vers des .dll ou un truc du genre, c'est bizarre car ça marchais très bien sous gcc.

  4. #4
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    J'ai trouvé un début de solution j'ai ajouté ça dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma comment(lib, "user32.lib")
    J'ai moins d'erreurs mais j'en ai toujours, il doit manquer d'autre pragma.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read_memory.obj:-1: erreur : LNK2019: symbole externe non résolu __imp_AdjustTokenPrivileges référencé dans la fonction "int __cdecl SetPrivilege(void *,wchar_t const *,int)" (?SetPrivilege@@YAHPEAXPEB_WH@Z)
    read_memory.obj:-1: erreur : LNK2019: symbole externe non résolu __imp_LookupPrivilegeValueW référencé dans la fonction "int __cdecl SetPrivilege(void *,wchar_t const *,int)" (?SetPrivilege@@YAHPEAXPEB_WH@Z)
    Quelqu'un pourrait-il m'expliqué ce qu'es-ce qu'un pragma ?

  5. #5
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    J'ai enfin réussi à compiler en 64 bit, il manquait aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma comment(lib, "advapi32.lib")

  6. #6
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    Par contre, euh ...comment je fais pour mes int, il font toujours 4 octets.
    Il devrait pas faire 8 octets en 64 bit ???

  7. #7
    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
    Justement, non, l'int fait encore 32 bits
    Et si le long long fait 64bits, le long fait ce qu'il veut. En l'occurence seuls les unixoïdes 64bits ont un long de 64bits (pas windows)
    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

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    a propos de ta premiere remarque, tu peux compiler toi meme Qt en 64 bits à partir des sources avec mingw64 x86_64.cela fonctionne bien.j'utilise https://sourceforge.net/projects/min.../mingw-builds/ , avec des threads posix. et par exemple http://download.qt.io/official_relea.../5.6.2/single/ cette version de Qt (le .zip).....il faut bien sur compiler d'abord openssl (si tu l'utilises) puis ensuite Qt.

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

Discussions similaires

  1. Conversion gcc vers visual C++
    Par réciproxy dans le forum Windows
    Réponses: 14
    Dernier message: 23/08/2010, 13h02
  2. Traduction assembleur GCC vers Visual Studio 2008
    Par moldavi dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 22/10/2009, 20h20
  3. Migrations de codes MFC de Visual 6.0 vers Visual studio 2005
    Par jojo le boss dans le forum VC++ .NET
    Réponses: 12
    Dernier message: 06/08/2006, 11h47
  4. migration vers visual C++ 2005
    Par goléador dans le forum MFC
    Réponses: 10
    Dernier message: 01/04/2006, 16h04
  5. migration vers visual C++ express 2005
    Par goléador dans le forum MFC
    Réponses: 2
    Dernier message: 30/03/2006, 12h33

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