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 :

besoin d'aide pour crée un wrapper


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Par défaut besoin d'aide pour crée un wrapper
    bonjour a tous,

    étant programmeur c# depuis 2ans maintenant j'ai depuis pas mal oublier les subtilité du c/c++.

    a se jour je doit développer une application de conversion de fichier audio utilisant les codec UIT-T (G711, G723, G729 etc).

    cependant on ne ma pas fournit des dll mais 2 répertoires, l'un contenant une multitude de fichier .lib et un autre contenant des fichiers .h. les fonctions d'encodage et de décodage en fonction des codec doivent se trouvé dedans.

    après pas mal de recherche j'ai vu qu'il fallai que je crée un wrapper du fait que l'application de je développe doit se faire en C#. J'ai parcouru pas mal d'article, de forum et de tutoriaux mais a chaque foi il expliquer comment faire quand l'on disposé des source, hors se n'est pas mon cas.
    exemple ils expliqué comment faire en utilisant les commandes
    extern "C" __declspec(dllexport) et extern "C" __declspec(dllimport)

    faut il que je modifie les fichier .h fournit ?

    tout cela reste bien noir encore pour moi.
    je sollicite donc votre aide afin que je puisse crée ces wrapper ou crée des dll a partir des fichier .lib et .h afin de les utilisé en C#
    merci d'avance

  2. #2
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    Si tu n'a pas de DLL tu ne peux pas faire de p/invoke.
    Donc il faut que tu créer une dll C, que tu la link aux libs que tu va utiliser, dans cette dll C tu écris des fonctions encapsulant celles dont tu as besoins.
    Une fois que tu aura ta DLL tu pourra écrire une classe C# qui fera du p/invoke.

    Exemple :
    Admettons une lib "MonCodec". Tu possède donc deux fichiers :
    - moncodec.lib (contenant le code exécutable de ta lib)
    - moncodec.h (contenant les prototypes utilisables de ta lib)

    Cette lib expose une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern "C" __declspec(dllexport) int GetOne();
    Toi tu commence par créer une DLL écrite en C :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "moncodec.h"
    extern "C" __declspec(dllexport) int Wrap_GetOne()
    {
        return GetOne(); // Appel de la fonction contenu dans ta lib.
    }

    Une fois que c'est fais, tu aura MonCodec.dll contenant une fonction Wrap_GetOne.
    Tu peux du coup faire du P/Invoke :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static class MonCodecDotNet
    {
        [DllImport("MonCodec.dll")]
        public static int Wrap_GetOne();
    }

    Et voilà.
    Après tu va certainement souffrir pour faire ca sur toutes les fonctions que tu utilises, sans parler des problèmes de pointeurs, allocation non grée par garbage, marshalling, ... mais je te laisse découvrir tout ca au cas par cas.

    Sinon tu peux aussi écrire une DLL en C++/Cli, ca te fait un peu moins de code à écrire normalement, mais bon, perso, je pratique le C++ depuis que j'ai 8 ans et ca fait bien 4 ans que je fais du C# et pourtant je n'arrive pas à me faire à la syntaxe de ce mixte de langage. A toi de voir.

  3. #3
    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
    Citation Envoyé par ctxnop Voir le message
    Sinon tu peux aussi écrire une DLL en C++/Cli, ca te fait un peu moins de code à écrire normalement, mais bon, perso, je pratique le C++ depuis que j'ai 8 ans et ca fait bien 4 ans que je fais du C# et pourtant je n'arrive pas à me faire à la syntaxe de ce mixte de langage. A toi de voir.
    Le wrapper C++/CLI est l'idéal, mais cela dépend de la complexité de l'API C à utiliser je pense. S'il y a peu de méthodes un DllImport peut suffire. Par contre si on commence à avoir beaucoup de méthodes, des structures natives avec des types natifs à la con... le wrapper C++/CLI est plus pratique je trouve puisque l'on peut mixer le code natif (C++ classique, pointeur, toussatoussa...) et managé. Et au passage on peut avoir une couche objet qui masque la "misère" de l'API C en étant plus naturel à utiliser.

    J'ai déjà utilisé dans un projet et ça m'a été bien utile

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Par défaut
    merci de vos réponses

    j'ai fait comme ma dit ctxnop est ca fonctionne bien, cependant mais bibliothèque de fonctions est en effet bien complexe et dispose d'énormément de fonctions.
    donc comme disait storm, l'idéal est le wrapper c++/cli, mais comme ctxnop je suis vraiment pas a l'aise du tout avec la syntaxe. si tu a donc des exemples, des astuces ou du-moins un début pour que je puisse me lancer dans la création d'un wrapper c++/cli. Pour le moment je vais continuer a tester la méthode de ctxnop en me contentant des fonctions vitales pour le développement de mon appli.

    merci encore

    ps : je vais jeter un œil sur les allocation non grée par garage et le marshalling voir si ça peu m'apporter quelque chose

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Sinon tu peux aussi écrire une DLL en C++/Cli, ca te fait un peu moins de code à écrire normalement, mais bon, perso, je pratique le C++ depuis que j'ai 8 ans et ca fait bien 4 ans que je fais du C# et pourtant je n'arrive pas à me faire à la syntaxe de ce mixte de langage. A toi de voir.
    C'est marrant ça, je suis pas seul alors,ça me rassure.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Par défaut
    En effet tu n'est pas le seul , ce qui m'aurai fortement étonné d'ailleurs.

    donc si quelqu'un passant sur se sujet aillant de bonnes connaissances en c++/cli pouvais donné des grandes lignes a suivre ou un modèle (ou même un tout petit bout de code ) afin que je puisse faire un wrapper un tant sois peu professionnel.

    car la méthode de ctxnop fonctionne sans problème. le problème c'est que je doit disposer d'environ 200-250 méthodes repartie dans 6 fichiers h et 35 fichiers lib et que s'il faut que je me tape la modification de toutes les méthodes et que je les wrappe une a une ca va vite me gonfler (enfin si je n'ai pas le choix je le ferai mais bon . . . )

    avis donc aux amateurs et professionnels du c++/cli et merci d'avance

Discussions similaires

  1. Besoin d'aide pour mon wrapper, les données sont faussées
    Par teddyalbina dans le forum C++/CLI
    Réponses: 9
    Dernier message: 20/05/2008, 21h46
  2. Besoin d'aide pour crée un pack de prog merci !
    Par AngelOne dans le forum Windows
    Réponses: 2
    Dernier message: 06/10/2006, 16h06
  3. Besoin d'aide pour Ease Wrapper
    Par AsmCode dans le forum OpenGL
    Réponses: 4
    Dernier message: 18/10/2005, 17h30
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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