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 :

Interfaçage avec du C++


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut Interfaçage avec du C++
    Bonjour,

    Je souhaiterai utiliser une classe écrite en C++ sous forme de librairie dans mon code C#.
    Je fais cela pour gagner en rapidité par rapport au code C#.
    Mais j'ai lu que la seule possibilité était d'écrire une dll en C++ pour l'utiliser en C#.
    Toutefois, je crois savoir que la dll n'est utilisée qu'au moment de l'exécution du programme, donc je craint perdre du temps d'exécution lors de l'ouverture de la dll.
    Existe t-il une façon d'utiliser du code C++ dans du C# sans perdre du temps en ouverture de librairie (mode static)?
    Peut-on compiler le code C++ dès le départ sans perdre du temps lors de l'ouverture de la librairie en l'intégrant dès le départ dans du C# (wrapper?)?

    Bref, je ne sais pas comment procéder pour ne pas perdre en vitesse d'exécution ce qui peut pas être perdu lors de l'ouverture de la librairie?

    Merci pour vos réflexions.

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le temps de chargement de la bibliothèque devrait être négligeable comparé au temps d'utilisation de celle-ci.

    Le vrai problème potentiel est au niveau des appels aux procédures de la bibliothèque mêmes.
    Si les procédures (méthodes C++) font des traitements très légers (return a + b ) alors l'overhead de l'interop peut se faire ressentir.
    Sinon si elles font des opérations raisonnablement complexes et donc longues alors aucun souci.

    Pour l'interfaçage tu as plusieurs solutions :
    - C++/CLI si tu as peu de classes C++ à utiliser,
    - SWIG si tu as un existant C++ plus conséquent,
    - COM mais seulement si tu veux exposer ton composant C++ à autre chose que .Net (VBA par exemple) car cela nécessite de l'adapter.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Merci, c'est clair, je peux donc utiliser une dll sans trop de soucis pour le temps d'exécution.

    Mais pour interfacer une seule classe C++, suite obligé d'utiliser du CLI ou non?

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Oui même pour une classe s'interfacer avec du C++ n'est jamais complètement trivial, contrairement à l'interfaçage avec C qui est géré nativement via P/Invoke.

    Donc si tu n'as qu'une classe un simple wrapper C++/CLI fera l'affaire.
    Pour faire ton wrapper tu as de nombreuses ressources disponibles dont : http://www.codeproject.com/Articles/...s-than-minutes

    Mais attention si l'API de cette classe consomme ou renvoie des types complexes C++ il faudra bien sûr aussi les mapper.
    Dans ce cas SWIG est un outil qui fait parfaitement l'affaire.

    C'est dans l'autre sens (appel de .Net depuis C++ natif) que ça devient plus tricky.
    Et là bien sûr niveau ressources c'est la dèche ... mais il y en a au moins une par ton serviteur : Using C# from native C++ with the help of C++/CLI

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Que signifie mapper... ?

    Est-ce que c'est modifier les fichiers C++ pour les rendre compatible dans la DLL avec le C#?

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Non ça veut juste dire qu'il faudra aussi créer un wrapper pour ceux-ci.

    Par exemple si dans une classe C++ "C" tu veux utiliser une méthode qui a comme signature :
    il faudra un wrapper pour "C" donc, mais aussi pour les types "A" et "B".

    Bien sûr inutile de wrapper tous les types, il faut seulement le faire avec ceux exposés par les méthodes C++ manipulées depuis .Net.

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

Discussions similaires

  1. Interfaçage avec explorateur Windows
    Par marcouille49 dans le forum SharePoint
    Réponses: 4
    Dernier message: 24/09/2008, 16h38
  2. Réponses: 6
    Dernier message: 04/01/2008, 11h47
  3. Interfaçage avec SAP
    Par cbleas dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 01/12/2007, 10h00
  4. interfaçage avec terminal portable
    Par azg33 dans le forum 4D
    Réponses: 0
    Dernier message: 29/11/2007, 09h40
  5. Interfaçage avec les API de cdrtools
    Par jeanbi dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/07/2004, 16h35

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