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++/CLI Discussion :

Utiliser une librairie C# en C++


Sujet :

C++/CLI

  1. #1
    Membre habitu�
    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
    Par d�faut Utiliser une librairie C# en C++
    Bonjour tout le monde,

    Je fais suite ici � un post que j'avais ouvert il y a quelques mois sur le forum C#
    Ayant �t� pris par d'autres occupations depuis je viens juste de me repencher sur la question.

    Bri�vement voici mon probl�me:
    Je d�veloppe un logiciel en C++ avec Qt et sous VS2010. Je poss�de une librairie �crite en C# dont je poss�de le code source et que je veux utiliser dans mon programme C++

    Suite � mon pr�c�dent post sur le forum C# j'ai cr�� un petit programme C++ qui utilise cette librairie via la prise en charge du CLR (j'ai juste param�tr� mon projet VS en prenant en charge le /clr et en faisant un #using<maLibrairieC#> dans mon code). Ca compile et fonctionne nickel.

    Le soucis vient quand j'essaye de faire la m�me chose dans mon logiciel avec Qt. Pour le d�velopper j'ai "int�gr�" Qt � VS2010 et je g�n�re donc un Makefile avec VS qui compile avec QMake (j'ai pas bien compris toutes ces �tapes de makefile, .pro, etc. mais peu-importe �a marche )

    Lorsque je lance la compilation en incluant la librairie � ce projet Qt, VS me dit qu'il faut que je prenne en charge le /clr
    Je fais donc comme pr�cis� ici (modif du .pro) sauf que m�me si �a compile (avec pleins d'avertissement) et que j'arrive � utiliser bri�vement les fonctions de ma librairie C#, l'interface bug compl�tement et ferme sur une erreur.

    J'ai fouill� un peu et apparemment Qt (et plut�t qmake) n'est vraiment pas fait pour fonctionner avec du .NET ou du code manag�.

    Le net est pas vraiment fourni en tutoriel/explication � ma port�e pour utiliser une librairie C# dans un code C++ (et encore moins avec Qt). J'ai trouv� que des explications pour inclure du C++ dans du C#

    Alors ma question c'est: je me demande s'il est possible d'�crire ma propre librairie en C++/CLI dans laquelle je pourrais utiliser la librairie C# et y r��crire des fonctions faisant des appels simples aux m�thodes du C# dont j'ai besoin. Du coup j'aurais une librairie qui serait �crite en C++ qui elle m�me ferait appel � la librairie C#. J'incluerais cette librairie dans mon projet C++/Qt pour pouvoir compiler sans erreur.
    Est ce que je dis est absurde? et est ce que c'est faisable?

    Sinon quelqu'un aurait une id�e ou des conseils/liens pour m'aider � faire �a?

    Merci � tous
    A+

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Le seul moyen d'utiliser en C++ natif une biblioth�que .Net, c'est via COM (Component Object Model). Si la biblioth�que C# n'est pas � la base pr�vue pour �a, tu devras en effet �crire une biblioth�que en n'importe quel langage manag� (C++/CLI, VB.Net, C#) qui elle sera expos�e via COM ("COM-Visible").

    Je sais qu'il y a quelque part sur dvp un tuto pour appeler .Net depuis C, mais je ne le retrouve pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre habitu�
    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
    Par d�faut
    Merci pour la r�ponse

    Citation Envoy� par M�dinoc Voir le message
    Si la biblioth�que C# n'est pas � la base pr�vue pour �a, tu devras en effet �crire une biblioth�que en n'importe quel langage manag� (C++/CLI, VB.Net, C#) qui elle sera expos�e via COM ("COM-Visible").
    J'ai moyen de recr�er la biblio, notamment en ajoutant dans les proprit�t�s un truc du genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [assembly: ComVisible(true)]
    Pour le moment c'�tait sur "false". Est ce que changer �a c'est suffisant pour que �a fonctionne avec la suite?
    Je pense que oui vu que la lib est comment�e comme suit (Mais c'est pour �tre sur )
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    // Setting ComVisible to false makes the types in this assembly not visible
    // to COM components.  If you need to access a type in this assembly from
    // COM, set the ComVisible attribute to true on that type.
    Et pour la suite quelle est la proc�dure pour utiliser ce "COM" avec mon code Qt/C++?
    Je vais fouiller de mon c�t� pour me renseigner la dessus mais si tu pouvais m'�clairer sur les grandes lignes �a m'aiderait � savoir ce que je dois chercher

    Citation Envoy� par M�dinoc Voir le message
    Je sais qu'il y a quelque part sur dvp un tuto pour appeler .Net depuis C, mais je ne le retrouve pas.
    Comme toujours je suis preneur de tout tutoriel sur le sujet, si vous avez quelques liens...

    Merci encore !

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par Aezer Voir le message
    J'ai moyen de recr�er la biblio, notamment en ajoutant dans les proprit�t�s un truc du genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [assembly: ComVisible(true)]
    Pour le moment c'�tait sur "false". Est ce que changer �a c'est suffisant pour que �a fonctionne avec la suite?
    Je pense que oui vu que la lib est comment�e comme suit (Mais c'est pour �tre sur )
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    // Setting ComVisible to false makes the types in this assembly not visible
    // to COM components.  If you need to access a type in this assembly from
    // COM, set the ComVisible attribute to true on that type.
    Ce commentaire est pr�sent partout, il est g�n�r� par Visual. Le r�gler � true ne suffira pas pour rendre ses classes utilisables: Il faudra leur donner des GUID toi-m�me* car sinon c'est PITA de conna�tre ceux g�n�r�s par Visual, et peut-�tre devoir faire des trucs au niveau des interfaces (je ne suis plus certain de comment �a marche de ce c�t�).

    Et pour la suite quelle est la proc�dure pour utiliser ce "COM" avec mon code Qt/C++?
    Je vais fouiller de mon c�t� pour me renseigner la dessus mais si tu pouvais m'�clairer sur les grandes lignes �a m'aiderait � savoir ce que je dois chercher
    Sous Windows � la base, on utilise des fonctions comme CoCreateInstance(), ou des classes templates comme CComPtr<> (MFC), _com_ptr_t<> (Compiler COM Support); j'ignore si QT poss�de des classes sp�cifiques.

    *Il y a deux outils pour cr�er des GUIDs qui sont livr�s avec certaines versions de Visual et qui doivent �tre disponibles en DL: uuidgen (en ligne de commande) et guidgen (fen�tr�).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre habitu�
    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
    Par d�faut
    Ok ok... merci pour les pr�cisions.
    Bon bin je crois que �a va �tre plus simple de r��crire la bibli en C++

Discussions similaires

  1. R�ponses: 2
    Dernier message: 06/04/2006, 17h44
  2. Utiliser une librairie license LGPL
    Par Elbarto dans le forum Licences
    R�ponses: 1
    Dernier message: 12/11/2005, 22h58
  3. Utiliser une librairie
    Par BugFactory dans le forum API standards et tierces
    R�ponses: 7
    Dernier message: 11/10/2005, 16h24
  4. Creer et utiliser une librairie externe � l'ex�cutable
    Par multani dans le forum Autres �diteurs
    R�ponses: 7
    Dernier message: 06/11/2003, 10h11
  5. Utiliser une librairie graphique
    Par Troopers dans le forum Linux
    R�ponses: 6
    Dernier message: 22/08/2003, 11h22

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