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

MFC Discussion :

PB conversion de type


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Par défaut PB conversion de type
    Bonjour



    je suis en train de faire une petite application mettant en oeuvre des DLL.

    Aucun PB pour faire une DLL d'extension MFC

    il n'en va pas de même pour faire Une DLL classique. cette application consiste à créer des lignes dans une fenêtre.

    j'ai un fichier line.h qui contient la description des objets de type CLine.

    j'ai un fichier ModArt qui contient le code suivant :

    void NewLine(CRect pRect, CObArray *poaLines);

    extern "C" void PASCAL EXPORT ModArtNewDrawing(CRect pRect,CObArray *poaLines);

    extern "C" void PASCAL EXPORT ModArtDraw(CDC *pDC, CObArray *poaLines);

    extern "C" void PASCAL EXPORT ModArtSerialize(CArchive &ar,CObArray *poaLines);

    extern "C" void PASCAL EXPORT ModArtClearDrawing(CObArray *poaLines);

    le code Line.cpp contient la définition des méthodes du fichier d'en-tête

    le code ModArt.cpp contient le code des fonctions déclarées dans ModArt.h

    voici un exemple de définition de fonction :



    extern "C" void PASCAL EXPORT ModArtDraw(CDC* pDC, CObArray* poaLines)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // Corps normal de la fonction

    // Récupère le nombre de lignes dans le tableau d'objets

    int liCount = poaLines->GetSize();

    int liPos;

    // Y a-t-il des objets dans le tableau ?

    if (liCount)

    {

    // Boucle en parcourant le tableau et en dessinant chaque objet

    for (liPos = 0; liPos < liCount; liPos++)

    ((CLine*)poaLines[liPos])->Draw(pDC);

    }

    }

    j'ai donc un tableau de type CObArray contenant des pointeurs sur des objets de type CLine (CLine*)

    lorsque je j'exécute la compilation de mon application afin d'obtenir le fichier.LIB et le fichier.DLL j'ai l'erreur suivante pour la ligne ci-dessous

    ((CLine*)poaLines[liPos])->Draw(pDC);



    message d'erreur :

    1>d:\bts\annee_2008_2009\bibliothèque statique dynamique\dll\classisque\classisque\modart.cpp(138) : error C2440: 'cast de type' : impossible de convertir de 'CObArray' en 'CLine *'

    1> Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé



    je ne vois pas d'ou viens cette erreur j'attends votre aide par avance merci



    JF MARTIN

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Comment est défini CLine?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Par défaut défintion de CLine
    Voici la déclaration de CLine et sa définition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    #pragma once
    #include "atltypes.h"
     
     
    // Cible de la commande CLine
     
    class CLine : public CObject
    {
    	DECLARE_SERIAL (CLine)
    public:
    	CLine();
    	virtual ~CLine();
    	CPoint m_ptForm;
    	CPoint m_ptTo;
    public:
    	CLine(CPoint ptForm, CPoint ptTo, UINT nCurWidth, COLORREF crColor);
    public:
    	void Draw(CDC* pDC);
    public:
    	void Serialize(CArchive & ar);
    private:
    	COLORREF m_crColor;
    private:
    	UINT m_nCurWidth;
    };
     
    Définition de CLine 
     
    // Line.cpp*: fichier d'implémentation
    //
     
    #include "stdafx.h"
    #include "Line.h"
    #include "ModArt.h"
     
    IMPLEMENT_SERIAL (CLine, CObject, 1)
    // CLine
     
    CLine::CLine()
    : m_ptForm(0)
    , m_ptTo(0)
    , m_nCurWidth(0)
    {
     
    }
     
    CLine::~CLine()
    {
    }
     
     
    // Fonctions membres CLine
     
    CLine::CLine(CPoint ptForm, CPoint ptTo, UINT nCurWidth, COLORREF crColor)
    {
    	m_ptForm = ptForm;
    	m_ptTo = ptTo;
        m_crColor = crColor;
    	m_nCurWidth = nCurWidth;
    }
     
    void CLine::Draw(CDC* pDC)
    {
     // Crée un crayon
         CPen lpen (PS_SOLID, 1, m_crColor);
     
          // Définit le nouveau crayon comme objet de dessin
         CPen* pOldPen = pDC->SelectObject(&lpen);
         // Dessine la ligne
         pDC->MoveTo(m_ptForm);
         pDC->LineTo(m_ptTo);
         // Rétablit le crayon précédent
         pDC->SelectObject(pOldPen);
    }
     
    void CLine::Serialize(CArchive & ar)
    {
    	 CObject::Serialize(ar);
     
          if (ar.IsStoring())
             ar << m_ptForm << m_ptTo << (DWORD) m_crColor;
          else
             ar >> m_ptForm >> m_ptTo >> (DWORD) m_crColor;
    }

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    J'ai dit une bêtise.
    En fait, l'erreur est peut être là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CLine*)poaLines[liPos])->Draw(pDC);
    à changer en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CLine*)(poaLines[liPos]))->Draw(pDC);

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Par défaut conversion de type
    désolé le PB subsiste tjrs

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Décidément, le cerveau se rouille:
    CObArray* poaLines est un pointeur sur CObArray.
    Donc pour obtenir le nième élément: (*poaLines)[liPoas]
    Puis pour le convertir en CLine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((CLine*)( (*poaLines)[liPoas]))->Draw(pDC);

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

Discussions similaires

  1. [DATE][CONVERSION] du type numerique au type date
    Par hamed dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/04/2005, 16h16
  2. Conversion de type
    Par sovitec dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2004, 14h29
  3. Conversion de type
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 10h30
  4. [MYSQL] conversion de type sur import de script
    Par sebos63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/08/2003, 10h00
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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