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 confirm�
    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
    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 confirm�
    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
    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
    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 confirm�
    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
    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
    Par d�faut
    comme tu le ferais pour une dll classique
    using mfc in a shared dll
    include afx etc ...

  6. #6
    Membre confirm�
    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
    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
    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 confirm�
    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
    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
    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 confirm�
    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
    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
    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 confirm�
    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
    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 confirm�
    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
    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
    Par d�faut
    tu as vc++ 2005 express ?

  15. #15
    Membre confirm�
    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
    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
    Par d�faut
    dans les options du projet, tu as bien mis "use mfc in a shared dll" ?

  17. #17
    Membre confirm�
    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
    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
    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 confirm�
    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
    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
    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, 16h46
  2. R�ponses: 5
    Dernier message: 11/01/2007, 08h53
  3. Utilisation de dll personelle avec VB.NET
    Par yakay dans le forum VB.NET
    R�ponses: 1
    Dernier message: 14/12/2006, 09h18
  4. utilisation dll creer avec visual studio
    Par CaptainChoc dans le forum VC++ .NET
    R�ponses: 3
    Dernier message: 17/08/2006, 22h07
  5. [MFC][DLL]Dialog Avec ActiveX dans une DLL ?
    Par matazz dans le forum MFC
    R�ponses: 1
    Dernier message: 16/05/2005, 16h36

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