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 :

Dll C++ avec MFC utilisée en C#


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut Dll C++ avec MFC utilisée en C#
    Bonjour,
    Je pense que la question a déjà été posée moulte fois, mais, je n'arrive pas à synthétiser tout ça pour arriver à mes fins...

    Je souhaite créer une "bibliothèque de classes", développée en C++, et utilisant les MFC.

    Ces classes seront utilisés dans une application C#.

    1) quel type de Dll utiliser ? On s'y perd avec toutes les options
    2) comment rendre les classes visible de l'application en C# ?

    J'ai compilé avec /clr ; j'ai ainsi pu référencer mon projet C++ dans le projet C#, mais je ne trouve pas comment dérouler la liste des classes disponibles dans l'assembly. Y a-t-il un namespace à définir dans la dll ?

    Merci d'avance.

    Nicolas
    Strasbourg

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    voilà j'ai pu trouver un code intéressant

    Si qqn peut me donner plus de détails sur les wrappers.
    Ce qui me dérange dans le code trouvé, c'est que les MFC ne sont pas utiliées.

    Il s'agit d'un projet de type "librairie de classes" CLR, et non pas d'un "projet Win 32" de type "Dll" avec "utilisation des MFC"

    Je me sens un peu pommé dans toutes ces configurations

    Nicolas
    Strasbourg

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    si tu veux en faire une assembly et l'utiliser facilement à partir de C#, il faut faire un projet "CLR library"
    si tu fais une DLL "classique", il te faudra jongler avec l'interop pour l'utiliser en C#

    mais vu que tu compiles avec /clr, tu as tout à fait interet à faire une assembly, ca sera plus simple à tous niveau, et le mieux, serait d'avoir un wrapper pour avoir une interface pure .net en C++/CLI

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Et comment tu utilises les MFC dans la dll ?
    using ...? # include ...?

    J'ai aussi des #include de drivers hard à utiliser dans cette dll

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    comme tu le ferais pour une dll classique
    using mfc in a shared dll
    include afx etc ...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    J'ai actuellement une librairie de fonctions C++ avec MFC non managée.
    Est-il judicieux de la passer en managée ou je la laisse tel quel ?
    Si je rajoute l'option /clr, j'ai le Warning suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Avertissement	3	warning LNK4099: PDB 'mfcm80ud.i386.pdb' n'a pu être trouvé avec 'C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\mfcm80ud.lib' ou sur 'c:\Mon Projet\debug\mfcm80ud.i386.pdb' ; l'objet sera lié sans informations de débogage	mfcm80ud.lib
    L'objectif, c'est de pouvoir accéder aux fonctions en C#, avec un
    Le propotype des fonctions sera ainsi connu de l'application en C#.

    Merci d'avance et bon WE

    Nicolas
    Strasbourg

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    si tu veux faire un using qqchose simplement en C#, il est judicieux de créer un wrapper en C++/CLI de ta dll MFC, pas forcément besoin de la recompiler avec l'option /clr

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Le wrapper, je le fais donc dans un autre projet, qui sera lui un projet clr ? C'est bien ça ? ou je peut reter dans la même dll ?

    Il est possible de faire un Wrapper sans CLR ?

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il est possible de rester dans le meme projet, mais cela peut en etre un autre

    par contre, le wrapper devra etre compilé en /clr, ou du moins les fichiers qui le composent

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Ca me semble pas mal comme solution, mais comment compiler une partie d'un projet avec /clr ?

    Je n'ai pas trouvé le paramètre dans les propriétés des FICHIERS, mais uniquement dans les propriétés du PROJET

    Si le code n'est pas managé, peut il qd même être débugé ? accès en pas à pas ?

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par Nico_stras
    Ca me semble pas mal comme solution, mais comment comiler une partie d'un projet avec /clr ?

    Je n'ai pas trouvé le paramètre dans les propriétés des FICHIERS, mais uniquement dans les propriétés du PROJET
    c'est la meme chose, click droit sur ton .cpp => configuration properties => c/C++ => general => compile with C L R support
    Citation Envoyé par Nico_stras
    Si le code n'est pas managé, peut il qd même être débugé ? accès en pas à pas
    oui

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    configuration properties => c/C++ => general => compile with C L R support
    Autant pour moi... J'ai mal regardé.

    Merci de m'avoir éclairé sur ce sujet. Je clos, Résolu, et je pense me débrouiller maintenant avec tous les sujets de ce forum et les très bons tutoriaux que l'on trouve ici

    Encore merci. Tu a même réussi à me donner goût au CLI lol

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Hello,
    J'ai une donc une dll MFC, compilée sans /clr. --> Pas de Warning, ni Erreur

    Cette application ne contient que des fonctions (pas de classes). Le but est de crer une classe managée dont les méthodes pointent vers ces fonctions.

    Si je rajoute une classe, et que je définis la compilation (du fichier seulement) AVEC /clr, J'ai une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ligne de commande error D8016 : options de ligne de commande '/EHs' et '/clr' non compatible
    Si je crée un projet "CLR library", et que je rajoute mes fichiers cpp et h (pas stdafx.h ni stdafx.cpp), j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fatal error C1189: #error :  Building MFC application with /MD[d]
    (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    	C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h	24

    Idées ?

    Merci

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu as vc++ 2005 express ?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Non, version complète.
    C'est comme s il n'avais pas les bons fichiers stdafx.

    J'ai laissé les fichiers de la bibliothèque CLR. je n'ai pas mis ceux du projet initial (Win32) :

    Si je crée un projet "CLR library", et que je rajoute mes fichiers cpp et h (pas stdafx.h ni stdafx.cpp), j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h 24
    C'est peut être du au Driver du matériel que j'utilise ? J'ai l'option de compilation qui prend le fichier lib

  16. #16
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    dans les options du projet, tu as bien mis "use mfc in a shared dll" ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Merci, c'est bien ça ....

    Encore une petite question : quel est la diférence entre dll statique et librairie statique pour les MFC ?

  18. #18
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par Nico_stras
    Merci, c'est bien ça ....

    Encore une petite question : quel est la diférence entre dll statique et librairie statique pour les MFC ?
    tu veux dire entre statique et dynamique ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Oui, excuse moi, j 'ai écrit trop vite. Entre Statique et dynamique.

    Encore un problème en générant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     error C3861: 'AfxBeginThread' : identificateur introuvable
    N'as-t-il pas pris en compte lesMFC ?

  20. #20
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    en gros, la liaison statique fusionne la bibliotheque à l'exe => plus gros, mais indépendant
    la liaison dynamique implique un appel dynamique ultérieur, moins gros, mais nécessite de deployer des dll. Ce qui implique que les dll pourront etre partagées entre plusieurs exe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Utiliser une DLL Delphi avec C#
    Par h8ciz dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/09/2007, 17h46
  2. Réponses: 5
    Dernier message: 11/01/2007, 09h53
  3. Utilisation de dll personelle avec VB.NET
    Par yakay dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/12/2006, 10h18
  4. utilisation dll creer avec visual studio
    Par CaptainChoc dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 17/08/2006, 23h07
  5. [MFC][DLL]Dialog Avec ActiveX dans une DLL ?
    Par matazz dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 17h36

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