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 :

Lien ODBC 32 bits != ODBC 64 bits ?


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Lien ODBC 32 bits != ODBC 64 bits ?
    Bonjour,

    J'ai développé une application en C#. Je l'ai déployé via Inno Setup (donc j'ai déployer le débug).

    Pour me connecter au lien ODBC j'utilise un fichier de conf et la classe ODBC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    using System.Data;
    using System.Data.Odbc;
    voici le bout de code
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
            public void connexion_sgbd()
            {
     
     
                //récupération du contenu du fichier de conf
                string driver = ConfigurationManager.AppSettings["sgbd_driver"];
                string protocol = ConfigurationManager.AppSettings["sgbd_protocol"];
                string host = ConfigurationManager.AppSettings["sgbd_host"];
                string port = ConfigurationManager.AppSettings["sgbd_port"];
                string service_name = ConfigurationManager.AppSettings["sgbd_service_name"];
     
                string user = ConfigurationManager.AppSettings["sgbd_user"];
     
                string user_uncrypt = MaFonction.decrypt(user, "lacle");
     
                string pwd = ConfigurationManager.AppSettings["sgbd_pwd"];
                string pwd_uncrypt = MaFonction.decrypt(pwd, "lacle");
     
     
                //hachage des variables
                connection_odbc.ConnectionString =
                    "Driver=" + driver + ";" +
                    "SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=" + protocol + ")(HOST=" + host + ")(PORT=" + port + "))(CONNECT_DATA=(SERVICE_NAME=" + service_name + ")));" +
                    "Uid=" + user_uncrypt + ";" +
                    "Pwd=" + pwd_uncrypt + ";";
     
                connection_odbc.Open();
            }
    J'ai exporté sous 32 bits ça marche normalement

    J'ai essayer sous 64 bits ça met l'erreur IM002

    Je développe avec visual studio express 2012

    Mon pc est en 32 bits

    On ma parler sur le plateau que les appels de DLL était différent en 32 ou 46 bits

    et on ma donner ce code la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if (IntPtr.Size == 4)
    {
        // 32-bit
    }
    else if (IntPtr.Size == 8)
    {
        // 64-bit
    }
    else
    {
        // The future is now!
    }
    Si vous avez la solution je serais reconnaissant !

    Bonne journée

    Merci pour vos réponses

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il y a bien une dll différente pour x86 et x64
    par défaut un projet est compilé en mode AnyCpu, c'est à dire qu'il s'adapte à la machine
    sur un os x64 il cherche donc une dll x64 (ce qui explique que ca fonctionne sur ton poste car il chage bien la dll x86)
    pour t'en sortir, tu peux forcer la compilation en x86 (dans les propriétés du projet)

    ou sinon intptr.size doit te donner la taille d'un pointeur, celle ci diffère selon x86 (4 octets) ou x64 (8 octets)
    (tu peux charger une dll manuellement via appdomain, je ne pourrais t'en dire plus, je n'ai jamais eut à charger une dll ou une autre et que ca fonctionne dans les 2 cas ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Quand tu dis, que je dois modifier les paramètres de compilation en x86 c'est bien 32 bits ?

    Alors j'ai une question : Est ce que je peut forcer le compilateur à me fournir un 32 bits qui est lui même exécutable via un PC en 64 bits ?

    Si c'est le cas, je déploie une version 32 bits (on s'en fout de l'avoir en 64). Donc tous les PCs en 32 ou en 64 peuvent exécuter l'applis et de ce fait avoir les bonnes dll dans leurs poche n'est-ce pas ?

    Dans le cas ou je trouve où est appeler les dll, j'ai juste a faire un petit if et à appeler la bonne dll ? (je préfère de loin la première solution c'est plus propre)

    En tous cas Merci pour ta réponse !

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    x86 = 32bits oui
    comme je l'ai dis si tu force la compilation en 32bits dans les propriétés du projet ton programme s'exécutera en 32 bits même sur un os x64 (et windows x64 peut utiliser un programme 32bits)
    dans ce cas ton unique dll 32bits sera utilisée et ton programme fonctionnera partout

    pour info la compilation n'est pas faite dans visual studio, qui lui ne fait qu'une précompilation (qui n'est ni 32 ni 64 bits), la compilation réelle est faite sur à chaque exécution au fur et à mesure de l'utilisation du programme

    après le chargement des dlls est automatique, quand ca veut compiler un bout de code qui utilise ta dll odbc il va la chercher à côté de l'exe par son nom, s'il ne la trouve pas il va chercher dans le GAC, s'il ne la trouve toujours pas il plante
    au démarrage sur un bout de code neutre on peut alors charger des dll manuellement, mais ce que je ne sais c'est si en chargeant la dll x64 à la place de la dll x86 le programme fera le lien et ne chargera pas la x86 après (je ne pense pas, mais ca serait à tester) ou sinon il faudrait voir en mettant les 2 dlls (si elle n'ont pas le même nom) si le chargement automatique utilise la bonne automatiquement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    pour info la compilation n'est pas faite dans visual studio, qui lui ne fait qu'une précompilation (qui n'est ni 32 ni 64 bits), la compilation réelle est faite sur à chaque exécution au fur et à mesure de l'utilisation du programme
    J'ai du mal à comprendre là. Quand je suis dans le fichier debug de l'application donc dans mes documents/Microsoft Visual Studio/Projets/MonProjet/Bin/Debug C'est l'application compiler ?


    Dans les paramètre du projet je sélectionne 32 bits c'est bien ça ?
    Nom : buildx86.png
Affichages : 329
Taille : 13,4 Ko

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Awery2 Voir le message
    J'ai du mal à comprendre là. Quand je suis dans le fichier debug de l'application donc dans mes documents/Microsoft Visual Studio/Projets/MonProjet/Bin/Debug C'est l'application compilée ?
    Oui et non, comme je l'ai dit c'est une précompilation (en MSIL, langage intermédiaire proche de l'assembleur sur la syntaxe)
    un exe .net n'est pas (encore) compilé en natif, il utilise une machine virtuelle (la CLR, d'où l'installation nécessaire du framework sur les postes) qui va faire une compilation finale (en code natif)

    autre info, il est "interdit" de livrer un .exe compilé en debug, moins stable qu'une compilation en release (bin\release\)

    Citation Envoyé par Awery2 Voir le message
    Dans les paramètre du projet je sélectionne 32 bits c'est bien ça ?
    oui
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    autre info, il est "interdit" de livrer un .exe compilé en debug, moins stable qu'une compilation en release (bin\release\)
    Comment génère-t'on une release bien stable ? Dans publish ?

    Merci j'ai fais les teste ce matin et ça marche avec sucess.

    Je dois juste voir encore un soucie de Framework (j'ai développer en Framework 4.5 et les ordinateur client sont en Framework 4)

    Merci encore !

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Awery2 Voir le message
    Comment génère-t'on une release bien stable ? Dans publish ?
    moi j'ai un combobox en haut avec debug ou release, on peut le rajouter comme plein d'autres boutons

    Citation Envoyé par Awery2 Voir le message
    Je dois juste voir encore un soucie de Framework (j'ai développer en Framework 4.5 et les ordinateur client sont en Framework 4)
    soit installer le framework 4.5 sur les postes
    soit modifier le framework cible dans les propriétés de ton projet pour mettre framework 4, si tu utilisais des choses du framework 4.5 visual studio te signalera des erreurs à ces endroits
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Probleme ODBC en Windows 7/64 bits
    Par GérardMartinelli dans le forum Access
    Réponses: 3
    Dernier message: 29/05/2014, 08h28
  2. [MySQL-5.1] Driver ODBC 5.1.13 32 bit pb inompatibilité architecture
    Par VITALTH dans le forum Outils
    Réponses: 0
    Dernier message: 05/03/2014, 08h48
  3. Comment configurer une source de donnees ODBC sur une machine 64 bits
    Par kazemarrabou dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 05/11/2011, 02h37
  4. [AC-2007] odbc sous windows vista 64 bits
    Par peche dans le forum Access
    Réponses: 0
    Dernier message: 11/11/2009, 10h03
  5. Réponses: 3
    Dernier message: 14/07/2009, 12h38

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