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 :

[C#]Importer des fonctions C?


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut [C#]Importer des fonctions C?
    Bonsoir,

    je n'ai pas une très grande expérience de la programmation en C ni en C++ ; je me suis plongé dans le C# directement.
    Cependant, j'ai besoin d'utiliser Lex et Yacc ; je connais ces outils pour les avoir utiliser dans leur version OCaml, assez pour savoir que j'aimerais les utiliser dans mes programmes C#.

    Problème : s'il y a pas mal de librairies qui permettent de faire du parsing de langage, je ne sais pas ce qu'elles valent, ni comment les utiliser ; par ailleurs, point de C# Lex ou de C# Yacc à l'horizon...

    Bref, il faut que j'utilise le mécanisme managed code de C# pour invoquer les fonctions C que vont me créer Lex et Yacc. Mais j'avoue ne pas trop savoir comment faire ; j'ai lu l'article de developpez.com sur les DLL natives en .Net, mais si je compile mes fichiers lex et yacc, j'obtiendrais une dll ou un .exe ? De plus, comment "mélanger" les types complexes (genre enum, constante...) de C et de Csharp ?

    Ca m'interesse également d'avoir ces informations, afin de pouvoir éventuellement utiliser des fonctions de "bas-niveaux", ie pouvoir utiliser des périphériques comme on doit théoriquement me l'apprendre l'an prochain, qui sont connectés à l'ordinateur via un port série ; comme je connais bien le C-sharp, j'aimerais savoir comment faire pour pouvoir mélanger le meilleur des deux mondes et encapsuler des fonctions C de pilotage du port série en Csharp.
    Je ne sais pas s'il "suffit" d'utiliser ImportDLL, j'avoue ne pas savoir quelles DLL peuvent être importées ou non (j'ai essayé avec VS2008 "add reference", parfois il importe, parfois il importe pas, il semble que certains DLL soient récalcitrantes...). Bref, je fais de la brasse coulée dans la mer des DLL, je ne renierait pas un ou deux liens "débroussaillants" pour ma gouverne.

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    si je compile mes fichiers lex et yacc, j'obtiendrais une dll ou un .exe ?
    Je ne saurais pas répondre à cette question, mais si tu veux utiliser des fonctions C depuis du code C#, tu auras besoin d'une DLL native C contenant les fonctions dont tu as besoin.

    Pour ce qui est de l'utilisation de ces fonctions en C# il y a 2 possibilités :

    1. tu utilises le P/Invoke (exemples de P/Invoke)
    2. tu réalises un wrapper C++/CLI qui servira de lien entre ta DLL native et ton projet C#

    Le P/Invoke est plus adapté si la complexité des fonctions natives est limitée à mon avis (pas de structures comme argument / retour des fonctions mais des types simples, par exemple). Ca évite d'avoir à jouer avec le marshalling suivant les cas.

    Le wrapper C++/CLI donne plus de souplesse (les structures ne seront plus un problème) tout en permettant d'offrir un niveau d'abstraction supérieur quand à l'utilisation des fonctions natives. L'idéal est d'avoir le .h de la DLL native pour travailler confortablement.

    Je n'ai pas trop les yeux en face des trous ce soir, j'espère que la réponse suffira dans un premier temps

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si je me rappelle bien mes lointains cours sur lex et yacc, ça ne se présente pas sous forme de librairie mais sous forme d'exécutables qui génèrent du code C... donc je ne pense pas que tu puisses les utiliser via P/Invoke ou une autre forme d'interop. Par contre, rien ne t'empêche d'appeler les exécutables via la classe Process

    Mais peut-être que je me trompe complètement et qu'il est possible des les utiliser en mode "librairie"...

  4. #4
    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

    Sujet déja abordé il y a "fort" longtemps.

    Il me semble qu'il existe des "implémentations" de lexx et yacc en C#...

    Tu devrais chercher un peu sur le net

    The Monz, Toulouse

Discussions similaires

  1. Importer des fonctions C/C++
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2013, 19h24
  2. Importer des fonctions d'un autre dossier
    Par TiMeWaLk dans le forum MATLAB
    Réponses: 3
    Dernier message: 23/07/2009, 13h22
  3. Importer des fonctions de DLL C++
    Par LaDeveloppeuse dans le forum VBScript
    Réponses: 9
    Dernier message: 16/01/2009, 09h46
  4. Réponses: 2
    Dernier message: 19/12/2006, 18h37
  5. Réponses: 7
    Dernier message: 11/08/2006, 15h03

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