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 :

Utilisation d'une librairie C++ dans du code C#


Sujet :

C#

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Utilisation d'une librairie C++ dans du code C#
    Bonjour,

    je dois utiliser une librairie écrite en C++ dans un code C#. Comment fait-on?
    J'ai uniquement à ma disposition un .h et un .LIB qui font appel à des macros qui je crois ne sont plus gérées par Visual Studio.
    Ex: void __far __pascal deinitComPort(unsigned short hComDev);

    lorsque j'essaie de compiler un projet de test en C++ qui fait appel à mon .h, Visual me renvoie des erreurs de syntaxe car il ne connait pas "__far" et "__pascal".

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué Avatar de bibbi
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Pour utiliser des fonctions c++ dans du code C# il faut utiliser DllImport et redéfinir la fonction en c#

    Un exemple avec une dll windows que tu pourras adapter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    //Dll dans laquelle se trouve ta fonction c++
    [DllImport("powrprof.dll", SetLastError = true)]
    //redéfinition de la fonction en c#
            public static extern UInt32 PowerDuplicateScheme(IntPtr RootPowerKey, ref Guid SrcSchemeGuid, ref IntPtr DstSchemeGuid);

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    si tu as le .H et la lib, tu peux aussi faire un wrapper C++ car pour faire de l'interop (comme précisé au dessus), il te faut une dll.. faire de l'interopérabilité sans dll n'est pas trop possible à ma connaissance (non absolue )
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par bibbi Voir le message
    Pour utiliser des fonctions c++ dans du code C# il faut utiliser DllImport et redéfinir la fonction en c#

    Un exemple avec une dll windows que tu pourras adapter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    //Dll dans laquelle se trouve ta fonction c++
    [DllImport("powrprof.dll", SetLastError = true)]
    //redéfinition de la fonction en c#
            public static extern UInt32 PowerDuplicateScheme(IntPtr RootPowerKey, ref Guid SrcSchemeGuid, ref IntPtr DstSchemeGuid);

    le dllImport peut être fait sur un fichier ".LIB"?

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    si tu as le .H et la lib, tu peux aussi faire un wrapper C++ car pour faire de l'interop (comme précisé au dessus), il te faut une dll.. faire de l'interopérabilité sans dll n'est pas trop possible à ma connaissance (non absolue )

    Comment réalise-t-on un wrapper? Avez-vous des exemples?

    comment puis-je remplacer "__far" et "__pascal"?

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    exemple de wrapper:

    chercher "Managed C++" ou bien "C++/CLI"

    Je crois même qu'en regardant dans les tutoriaux sur ce site, tu trouveras des exemples de wrapper et des explications...

    Cela dit, pour les wrapper, un forum type C++/CLI sera plus "approprié" qu'ici...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  7. #7
    Membre habitué Avatar de bibbi
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    J'ai regardé un petit peu pour le wrapper c++/cli.

    J'ai trouvé ce site ( section "Wrapping Around a Native C++ Class")

    http://www.codeproject.com/KB/mcpp/quickcppcli.aspx

    Ça pourrai peut être t'aider...

  8. #8
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos conseils, j'ai vais regarder tout ça.
    par contre je ne sais pas trop comment me débrouiller avec mon "__far __pascal"...

  9. #9
    Membre habitué Avatar de bibbi
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 113
    Points : 137
    Points
    137
    Par défaut
    Pour le __far __pascal, je pense qu'il vaut mieux que tu poste ta demande sur un forum de C/C++. Tu auras sûrement plus de chance d'avoir une réponse

Discussions similaires

  1. Utilisation d'une dll C# dans du code C++ ?
    Par Selven dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 15/04/2013, 23h09
  2. Réponses: 4
    Dernier message: 03/03/2010, 09h08
  3. utilisation d'une fonction ailleur dans le code
    Par tortuegenie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/11/2008, 11h07
  4. Réponses: 7
    Dernier message: 05/01/2008, 19h37
  5. Réponses: 4
    Dernier message: 13/10/2005, 12h41

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