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 :

Library C# vers C++


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Library C# vers C++
    Bonjour tout le monde,

    Tout d'abord comme c'est la première fois que je poste sur développez.net, je me présente rapidement: dans le cadre de mon activité professionnelle j'ai du me lancer dans le développement d'une application.
    Avant de commencer j'étais (et je suis toujours d'ailleurs) un vrai noob en programmation, je n'avais qu'appris brièvement le Basic (sur TI-83 au lycée) et le Pascal pendant mes études après.
    Je me suis donc mis au C++, j'ai appris en suivant le tuto C++ du zéro, j'utilise Qt et d'autres librairies et SDKs.
    J'utilise Visual Studio 2010.

    A présent j'ai un soucis que je n'ai pas réussi à résoudre seul en fouinant sur les forums et du coup je vous expose mon problème en espérant que l'on puisse m'aider

    Comme j'ai dit j'ai développé tout un programme en C++ avec Qt. Je cherche à inclure dans ce programme une nouvelle librairie.

    Mon problème est que je ne dispose que d'une DLL (pas de .lib)

    En revanche je possède le code source de création de la DLL, ce code est écrit en C# et j'arrive à le compiler avec VS2010 (à la nuance prêt qu'il me dit "Un projet avec un type de sortie bibliothèque de classes ne peut pas être démarré directement, etc.")

    Je veux donc inclure cette librairie à mon projet C++
    J'ai déjà pisté la méthode du LoadLibrary, GetProcAddress, etc. mais j'espère trouver plus simple...

    Étant donné que je possède le code source de la library, est-il possible de regénérer celle-ci avec en prime un .lib associé pour facilement l'inclure dans VS après?
    Et si oui, comment fait-on (avec VS2010) pour "faire" cette librairie?

    Pour info le code source se trouve ici: http://code.google.com/p/skywatcher/...%2FBasicApi_CS

    Je vous remercie par avance !

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Dans la mesure où ton programme en C++ n'est pas développé en "managé" (avec le framework .Net) il est impossible d'appeler les objets d'une assembly .NET.

    Le seul moyen de contourner cela est d'écrire un "wrapper" en C++/CLI (Common Language Interface) qui offrira un coté une interface en natif (pour ton programme C++) et de l'autre un mode managé pouvant exploiter ton assembly .NET

    La réalisation de tels "wrapper" est assez délicat.(le C++/CLI est assez différent du C++ que tu connais).

    Quelques éléments sur le C++/CLI dans cet article de Wikipedia : http://en.wikipedia.org/wiki/C%2B%2B/CLI

    Et un tuto sur la question sur ce site : http://nico-pyright.developpez.com/t.../managedworld/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Arf c'est embêtant pour moi tout ça...
    Si j'ai bien compris tant que mon programme n'est pas managé il ne peux pas utiliser une bibliothèque qui elle l'est?

    Et il n'est pas possible de faire en sorte que mon programme devienne "managé" sans toucher au code? Je suppose que le C++/CLI sait "lire" le C++
    Du coup y'aurait qu'à changer mon projet C++ en projet C++/CLI même si au final je n'utilise aucune fonction du CLI (à part l'importation de la DLL) et que je continue à coder en C++

    (je fais juste des suppositions, ça ne marche malheureusement peut être pas comme ça...)

    Sinon y'a aucune chance que la biblio en C# puisse quand même fonctionner avec mon projet si elle n'a été codé qu'avec des fonctions que le C++ connait?

    En tout cas merci pour la première réponse

  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 : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Aezer Voir le message
    Arf c'est embêtant pour moi tout ça...
    Si j'ai bien compris tant que mon programme n'est pas managé il ne peux pas utiliser une bibliothèque qui elle l'est?
    Tout à fait; sauf un cas, si ton programme peut utiliser des composants COM et que ta librairie managées puisse exposer ses objets en COM.

    Et il n'est pas possible de faire en sorte que mon programme devienne "managé" sans toucher au code? Je suppose que le C++/CLI sait "lire" le C++
    Oui, donc justement modifier le code C++ => C++/CLI.

    Du coup y'aurait qu'à changer mon projet C++ en projet C++/CLI même si au final je n'utilise aucune fonction du CLI (à part l'importation de la DLL) et que je continue à coder en C++
    L'importation de DLL est une notion étrangère à .NET (enfin si, elle existe, mais justement pour l'opération inverse : utiliser en .NET des DLL non managées). IL faut coder en C++/CLI la partie de ton programme qui accédera aux composants managés.

    Sinon y'a aucune chance que la biblio en C# puisse quand même fonctionner avec mon projet si elle n'a été codé qu'avec des fonctions que le C++ connait?
    Désolé, mais cette phrase n'a pas de sens. Une biblio C# utilise le framework .NET, pas les fonctions connues du C++. D'ailleurs, la notion de "fonction" du C/C++, c'est à dire d'appel d'opérations hord du contexte d'une classe parente n'existe pas en .NET contrairement aux C++ qui supporte les mondes objets et non-objets; .NET ne connait que des méthodes de classes (même si certaines de ces méthodes portent le nom de "function" dans la syntaxe VB.Net, c'est toujours dans une classe). Les langages .NET (C#, VB.NEt, F#, C++/CLI) sont "pure objet".

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

Discussions similaires

  1. Ajouter des liens, vers répertoire réseau, dans libraries.
    Par lazylooz dans le forum SharePoint
    Réponses: 2
    Dernier message: 17/10/2014, 13h48
  2. [SP-2010] Drag and drop d'Outlook vers Sharepoint Document Library
    Par djdada dans le forum SharePoint
    Réponses: 4
    Dernier message: 23/04/2012, 10h04
  3. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  4. Réponses: 1
    Dernier message: 13/05/2002, 09h19

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