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 :

Problème de liaison C++/CLI avec DLL MFC


Sujet :

C++/CLI

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut Problème de liaison C++/CLI avec DLL MFC
    Bonjour,
    J'ai un problème que je n'arrive pas à règler...
    J'ai réalisé toutes une application en C++/CLI avec windows forms, code managé et tout et tout et maintenant j'aimerai utiliser un projet DLL réalisé avec MFC dedans.
    J'ajoute la DLL classiquement mais le compilateur me fait une erreur sur chaque composant MFC qu'il rencontre... que faire?
    Sinon, j'ai mis dans les propriétés du projet "Utiliser les MFC dans une DLL partagée" et l'option "/clr".

    Merci d'avance.

  2. #2
    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
    quelle erreur ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    plein, a chaque mot clé propre a MFC.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2504: 'CWinThread'*: classe de base non définie

  4. #4
    Membre habitué Avatar de GP77
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 131
    Points
    131
    Par défaut
    Tu as ajouté System.Runtime.InteropServices dans ton code managé ?
    Ajouté le .h d'entrée dans ton code managé ?
    Tu as spécifié __declspec(dllexport) dans ta dll MFC ?

    Je ne pense pas en avoir fait plus et ca fontionne...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    J'avais oublié le "System.Runtime.InteropServices" mais en le rajoutant ca ne change rien...
    En gros, mon code ressemble a ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #pragma once
     
    using namespace System::Runtime::InteropServices;
    #pragma comment (lib, "Trilib.lib")
    #include "AcqFunc.h"
     
    ref class Trident
    {
    public:
    	Trident(void);
    };
    Quand je compile j'ai une erreur sur chaque objet MFC de AcqFunc.h.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AcqFunc.h(36) : error C2504: 'CWinThread' : classe de base non définie
    etc....
    J'ai donc essayé comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #pragma once
     
    using namespace System::Runtime::InteropServices;
    #pragma comment (lib, "Trilib.lib")
     
    ref class Trident
    {
    public:
    	[DllImportAttribute("Trilib.dll")]
    	extern "C" __declspec(dllexport) bool SetReset();
    	Trident(void);
    };
    mais j'ai 2 erreurs en compilant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Trident.h(11) : error C2059: erreur de syntaxe*: 'chaîne'
    Trident.h(11) : error C2238: jetons inattendus avant ';'

  6. #6
    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
    c'est quoi trilib ? es-tu sur de faire correctement les includes MFC ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Trilib est le nom de la DLL.
    Je n'utilise pas MFC dans mon application, juste dans la DLL.

  8. #8
    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
    oui, mais à tout les coups, dans le .h il y a CWinthread
    Donc, ton application doit utiliser les MFC
    sinon, bonjour les histoires d'intérop ...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    Et si j'enlève tous les composants MFC du .h et je les mets ailleurs dans la DLL ca peut marcher?

  10. #10
    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
    le but ca serait de faire une encapsulation (un wrapper) suffisament simple pour que le marshalling soit simple

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Points : 38
    Points
    38
    Par défaut
    J'ai enlevé tout le MFC dans le fichier include et ca marche.

    Merci pour votre aide!

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

Discussions similaires

  1. Problème dans un projet ATL COM avec DLL et MFC.
    Par jamais34 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/10/2007, 19h03
  2. Problème avec dll win32com
    Par jbidou88 dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2006, 14h06
  3. Problème de creation de repertoire avec une DLL
    Par Avisseau dans le forum Delphi
    Réponses: 4
    Dernier message: 19/06/2006, 09h13
  4. Réponses: 6
    Dernier message: 20/10/2005, 21h36
  5. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43

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