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 :

Utiliser une DLL codée en C++


Sujet :

C#

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Utiliser une DLL codée en C++
    Hello,

    Est-il possible, dans un code C#, d'utiliser une DLL codée en C++ ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Tout à fait, tu peux utiliser pour cela des DllImport

  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
    Par défaut
    salut

    pour utiliser du code C++ dans une application C#, il y a plusieurs approches possibles


    Il faut savoir qu'on ne peut pas directement en C# instancier une classe C++. C'est impossible sans faire quoi que ce soit.

    Avec l'interop (dllimport), tu peux appeler des méthodes d'une DLL. Après, que la dll soit codée en C++, C, Delphi, autre, peut importe. Il faut juste que cette DLL expose des méthodes... ET donc, tu appelles des méthodes, et pas des objets.

    La solution 2 est de faire un wrapper en C++/CLI. Cela te permet d'ouvrir ta DLL C++ au monde C# en faisant une classe qui va faire les conversions nécessaires entre les 2 mondes.

    Si tu veux directement utiliser une classe C++ en C#, la seule solution que je vois est de créer un wrapper C++/CLI. C'est relativement simple et rapide mais pas "automatique"... donc, je t'invite à regarder des exemples de code de wrapper que l'on trouve un peu partout sur le net.

    En espérant avoir répondu à ta question.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    A l'exposé complet de theMonz31, on peut ajouter aussi l'exposition d'un objet COM par la DLL C++.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    OK. Rien de simple, donc. :-/

    Merci à tous.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par oodini Voir le message
    OK. Rien de simple, donc. :-/
    Ben si.
    Un DllImport n'est vraiment pas compliqué.
    Un wrapper C++/CLI est un peu plus touchy mais sans plus.

  7. #7
    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
    Par défaut
    si ta classe est "assez" simple en terme de propriété et de nombre de méthode à wrapper, ca peut se faire en 1h à tout casser...

    Faire un wrapper, dans beaucoup de cas c'est quand même "Ultra" simple (en dehors de la recherche de la bonne fonction pour convertir les types différents)...

    Et après, quel plaisir de pouvoir utiliser son ancien code C++ dans le monde .Net.

    Franchement, dans un cadre professionnel et personnel, ca en vaut le coup...

    It really worth it. Believe me

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Oui, mais no. Je vous situe le contexte : j'aurais besoin de faire appel aux bibliothèques suivantes : http://www.sintef.no/Projectweb/Geom...its/Downloads/

    Il ne s'agit donc pas de mes classes, mais d'une palanquée de classes, avec parfois des fonctions utilisant du Boost passé en paramètre.

    Et j'ai déjà du mal à compiler ces bibliothèques à cause de ma méconnaissance de CMake (je avais déjà galéré avec Bjam, Buckminster, et SCons... un peu plus, un peu moins...).

    Citation Envoyé par theMonz31 Voir le message
    Franchement, dans un cadre professionnel et personnel, ça en vaut le coup...
    On dirait que tu fais de la pub pour une technique de développement personnel. :-)

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par oodini Voir le message
    Il ne s'agit donc pas de mes classes, mais d'une palanquée de classes, avec parfois des fonctions utilisant du Boost passé en paramètre.
    Par curiosité j'ai télécharger les fichiers.

    Un truc bizarre, c'est le suffixe en "C" alors que quand on ouvre les sources, cela semble être du C++.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Oui, mais quand tu vas voir dans SISL, qui est en C, le suffixe est c (en minuscule). :-)

    Apparemment, pour les auteur de cette bibliothèque, on a :
    Par ailleurs, si tu arrives à compiler Newmat (demandé par une des libs) avec Visual 2010, ça m'intéresse...

  11. #11
    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
    Par défaut
    si tu veux faire des maths avec des librairies .Net, ils en existent qui sont directement en .Net.... et qui peut-etre peuvent couvrir tes besoins

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Je cherche une bibliothèque qui fait de la construction de surfaces B-Splines / NURBS à partir d'un nuage de points (plus ou moins fait de mon côté), et des calculs d'intersection entre des segments et des surfaces NURBS.

    Si tu connais une bibliothèque .Net, je suis preneur...

  13. #13
    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
    Par défaut
    désolé, je ne connais pas de librairie pour faire cela...

    Mais peut-etre regarder du coté de IMSL.Net


    Sinon, tu peux aussi tenter ton bonheur du coté de python for .Net et utiliser des librairies python qui feraient celà

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Mais peut-etre regarder du coté de IMSL.Net
    Ça pue les maths pour la finance, ça. :-)

Discussions similaires

  1. [MEX] utiliser une dll C dans le code matlab
    Par hector2 dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/06/2010, 15h53
  2. [Windows]utiliser une dll c# en java
    Par dude666 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/07/2005, 02h19
  3. Réponses: 7
    Dernier message: 13/01/2005, 10h30
  4. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01

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