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

[Debutant] Impossible de trouver une correspondance avec l'objet - DLL - new


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut [Debutant] Impossible de trouver une correspondance avec l'objet - DLL - new
    Bonjour,

    ma question va peut etre vous paraitre bete mais en ce moment je n'arrette pas .


    J'ai créer une class (nomé General mais ca c pas important) avec un TOpenDialog et une fonction qui utilise se TOpenDialog;

    J'ai fais comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class TGeneral 
    {
    public :
    AnsiString __fastcall SelectFichier();
     
    private :
    TOpenDialog* OpenDialog1;
    }
    puis la definition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AnsiString __fastcall TGeneral::SelectFichier()
    {
      OpenDialog1 = new TOpenDialog;
      if(OpenDialog1->Execute())
      {
     
        //--Mon code--
     
      }
    }
    Mais le truc c'est que mon compilo me dit :

    E2285 Impossible de trouver une correspondance pour 'TOpenDialog::TOpenDialog()'
    alors c'est certainement que j'ai mal fait qque chose.


    je precise que la fonction SelectFichier se trouve dans une dll et qu'elle est appellé quand l'utilisateur clique sur un bouton d'un autre projet.

    La dll n'a donc pas en elle meme de Fiche (TForm).

    Faut il que je precise quelque chose à ma class pour quell connaisse le TOpenDialog ?

    merci de vos reponses et de votre aide !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Soit ton message apparait à la compilation, alors TOpenDialog n'a pas de constructeur par défaut, soit c'est au link alors tu ne joint pas les .lib nécessaires.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    je regarde ça tout de suite et je te dis !



    Edit1 :

    c'est à la compilation, mais TOpenDialog a forcément un constructeur car c'est un object de builder. Ce n'est pas moi qui les implementé...


    Comme ma class a été créer par moi-meme est ce que je dois faire dérivée ma class par rapport à une autre.

    Par eemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class TGeneral : public TObjet
    {
     
    // -- Mon code--
    }

    Edit 2: Bon ben non ca change rien du tout !


    J'ai testé sur un projet vide, de créer un TOpenDialog à la main comme j'ai fais en haut et ca marche pas ! Par contre quand je mets le TOpenDialog grace à l'icone fournit par C++builder, il n'y a pas de souci ... ce qui est normal en meme temps .
    J'attends vos réponses, j'espere que vous pourrez m'aider !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Citation Envoyé par adurandet Voir le message
    c'est à la compilation, mais TOpenDialog a forcément un constructeur car c'est un object de builder. Ce n'est pas moi qui les implementé...
    Je parlais d'un constructeur par défaut, c'est à dire celui auquel tu ne passes pas d'argument (comme tu le fais la). Je ne connais pas la VCL mais j'ai l'habitude d'autres apis graphiques et, en général, il est nécessaire d'assigner une fenêtre à une boite de dialogue. Lis la documentation de ton api !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    ok, merci de ta reponse, je vais chercher de se coté la...


    Malheureusement si je n'ai pas de fenetre, donc je ne sais pas comment je vais lui en assigner une...

    Mai sje vais y reflechir.

    Ciao!

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Pour mettre à la main un des formulaire préparé par Borland, il faut au minimum:
    • une déclaration anticipée de la classe dans le fichier d'en-tête
    • l'inclusion du fichier d'en-tête dans lequel le formulaire est défini dans le fichier d'implémentation

    ou
    l'inclusion du fichier d'en-tête dans lequel le formulaire est défini dans le fichier d'en-tête

    (la première solution est peut-être plus "propre"

    De tête, je dirais que le fichier à inclure est dialogs.hpp

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    C'est vrai que j'avais oublié ça dans ma DLL, mais le probleme ne vient pas de la quand meme ...

    car par exemple, je prends un nouveau projet, je pose, un TOpenDialog sur la Form1,

    Builder m'inclut automatiquement le fichier dialogs.hpp et créer un TOpenDialog *OpenDialog1, je peux donc jouer avec.
    Mais si je créer un TOpenDialog *OpenDialog2 la je peux pas jouer avec le deuxieme.

    je vous mets le code de mon projet pour que vous compreniez mieux

    le .h
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef ChoixProjetUnitH
    #define ChoixProjetUnitH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Buttons.hpp>
    #include <Dialogs.hpp>   //<--- Bien présent !
    //---------------------------------------------------------------------------
    class TChoixProjet : public TForm
    {
    __published:	// Composants gérés par l'EDI
            TSpeedButton *NouveauButton;
            TSpeedButton *OuvirButton;
            TSpeedButton *QuitterButton;
            TMemo *Memo1;
      TSpeedButton *MAJButton;
      TOpenDialog *OpenDialog1; //<----- l'object créer automatiquement par Builder, avec le petit icone sur la Form
     
     
      void __fastcall NouveauButtonClick(TObject *Sender);
     
     
    private:	// Déclarations de l'utilisateur
    public:		// Déclarations de l'utilisateur
            __fastcall TChoixProjet(TComponent* Owner);
            TOpenDialog *OpenDialog2;  //<---- l'object créer par moi
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TChoixProjet *ChoixProjet;
    //---------------------------------------------------------------------------
    #endif
    mon .cpp

    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
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
     #include "ChoixProjetUnit.h"
     #include "ProcessingDLLUnit.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TChoixProjet *ChoixProjet;
    TGeneral *General1;
    //---------------------------------------------------------------------------
    __fastcall TChoixProjet::TChoixProjet(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TChoixProjet::NouveauButtonClick(TObject *Sender)
    {
    OpenDialog1->Execute();
     
    OpenDialog2->Execute();
    }

    Il lance bien le premier mais bug sur le deuxieme... avec une violation acces.

    Si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OpenDialog2 = new TOpenDialog;
    OpenDialog2->Execute();
    Et bien Builder me dit pendant la compilaton :
    E2285 Impossible de trouver une correspondance pour 'TOpenDialog::TOpenDialog()'

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    ok j'ai deja un bout de solution


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OpenDialogTest = new TOpenDialog(this);
    OpenDialogTest->Execute();
    Il faut preciser le Owner pour new TOpenDialog.

    Je pense qu'il me suffit juste que je recuperr le Owner de ma fentre principale dans DLL... mais je sais pas faire lol!

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Et si tu essayais avec NULL? Quoique si c'est possible c'est forcément écrit dans la doc.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 57
    Points
    57
    Par défaut
    Oui j'avais essayé avec NULL et ca n'avait pas marché.

    Mais j'ai trouvé une solution quand même !

    J'ai donné à ma classe un owner (celui de ma fenetre principal) puis j'ai donné le owner de ma classe au TOpenDialog Et ca fonctionne !


    C'est nickel chrome mega cool Up LOL


    Merci pour votre aide !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2008, 19h17
  2. Impossible de prendre une valeur avec Console.Read( ?
    Par Tux1 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/01/2007, 16h29
  3. [debutant]probleme envoi d'une chaine avec send()
    Par romainromain dans le forum Réseau
    Réponses: 4
    Dernier message: 23/11/2006, 22h37
  4. impossible de comparer une chaine avec use strict
    Par erc_fun dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2006, 10h56
  5. [Plugin][MYECLIPSE]Impossible de trouver une JVM
    Par tolsam dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 08/08/2004, 20h46

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