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 :

Determiner l'architecture de compilation [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut Determiner l'architecture de compilation
    Bonjour,
    Je voudrais l'équivalence en C# :
    #ifdef _WIN64

    Car j'ai une .dll codé en amd64 et x86 (madll_x86.dll et madll_x64.dll) , et dans mon projet je veux faire la distinction selon l'architecture sélectionner.

    Pour charger ma .dll j'utilise DllImport.

    Comment on fais ?

    Autre Question :
    Pour l'architecture ANY CPU , je dois charger ma .dll en AMD64 ou x86 ?

    Merci

  2. #2
    Membre émérite Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Par défaut
    l'équivalent serait

    #if _Win64
    #endif

    Ensuite dans les paramétrés du projet tu peut définir des symboles de compilation, le #if regarde si ton symbole est défini et se branche sur la condition si c'est le cas.

    Pour du Any CPU il est plutôt conseille d'utiliser la X86 qui est compatible sur les archis 32 et 64 bits.

    Cela donnerais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    #if win64
    DllImport(ma dll 64 bits)
    #else
    DllImport(ma dll any cpu)
    #endif

  3. #3
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Tu peux utiliser pour déterminer la plateforme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static Boolean Is64Bit()
    {
      return Marshal.Sizeof(typeof(IntPtr)) == 8;
    }
    lien

  4. #4
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    Bonjour,
    @Yann, quelqu'un a répondu à ta question sur StackOverflow :
    http://stackoverflow.com/questions/1...or-directive-c

    @azstar et plus simplement aussi, la propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Environment.Is64BitProcess
    Bonne journée à tous

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut
    je teste ce soir.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut
    tester avec #if win64 :
    Ca ne marche pas .

    Visual Studio 2005.

    Ca ne marche pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #if win64
    dfdffd //provoquer erreur de compilation si platform x64 selectionner ,ce qui n'est pas le cas ;
             [System.Runtime.InteropServices.DllImport("..\\openglics.apiuser_x64.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi, EntryPoint = "user_openglics_API_LoadLicense")]
             static extern unsafe IntPtr user_openglics_API_LoadLicense(
                     ref OPENGLICS_APILOAD a,bool showerrinit);
    #else
            [System.Runtime.InteropServices.DllImport("..\\openglics.apiuser_x86.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi, EntryPoint = "user_openglics_API_LoadLicense")]
             static extern unsafe IntPtr user_openglics_API_LoadLicense(
                     ref OPENGLICS_APILOAD a,bool showerrinit);
    #endif

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

Discussions similaires

  1. Probleme compilation architecture MIPS
    Par tixlegeek dans le forum C
    Réponses: 1
    Dernier message: 16/03/2010, 16h57
  2. Pb de compilation ou architecture non prise en charge
    Par klingler32 dans le forum Débuter
    Réponses: 4
    Dernier message: 04/02/2010, 19h42
  3. Cross-compiler pour architecture ARM.
    Par terminator59140 dans le forum Linux
    Réponses: 8
    Dernier message: 15/07/2009, 13h25
  4. Connaitre l'architecture de compilation
    Par barbug dans le forum C++
    Réponses: 2
    Dernier message: 08/03/2009, 23h19
  5. Réponses: 1
    Dernier message: 24/05/2007, 16h41

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