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

Composant crée dynamiquement & Access in invalid memory


Sujet :

C++Builder

  1. #1
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut Composant crée dynamiquement & Access in invalid memory
    Bonjour,
    Toujours sur le thème de mon précédent post 'Evenement d'un composant crée dynamiquement', il semble que tous les évènements (hormis les 'basiques' ne nécéssitant que TObject *Sender en parametres)
    ont besoin d'etre 'retouchés' .
    En effet, sur la création de OnMouseMove d'un TButton
    . en manuel on obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     xxxMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
    . pour le créer en dynamique, il faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xxxMouseMove(TObject *Sender, Classes::TShiftState Shift, int X, int Y);
    Bon, ca fera pas tourner un satellite mais ca servira bien a quelqu'un un jour
    Maintenant j'ai une question (et oui encore !):
    Ma form et les composants sont bien crées en dynamique, les évènements aussi, et je fais des tests pour par exemple stoker des valeurs dans une StringList lors du click dans une listbox (par ex).
    Mais je tombe sur CodeGuard qui dit :
    Access in invalid memory
    Il semble que : StringList = ???;
    C'est pourtant bien un membre de la form, et j'ai essayé de déclarer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form->MaListe = new TStringList;
    aussi bien dans le constructeur de celle ci, que dans la fonction ds la dll qui crée cette form. Le compilateur dit OK, mais j'ai tout faux a l'execution...
    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bijour,
    Ji trouvi...
    Rien d'exceptionnel, a part que je me suis lancé dans un truc un peu plus dur que mon niveau de connaissance mais faut bien progresser...
    A propos, si quelqu'un connait des organismes serieux pour obtenir une formation reconnue (salarié CDI, je peut tenter le Fongecif ?).
    Ou sur quel forum poser ce genre de question...

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Citation Envoyé par Cantrelle
    Bijour,
    Ji trouvi...
    Rien d'exceptionnel, a part que je me suis lancé dans un truc un peu plus dur que mon niveau de connaissance mais faut bien progresser...
    A propos, si quelqu'un connait des organismes serieux pour obtenir une formation reconnue (salarié CDI, je peut tenter le Fongecif ?).
    Ou sur quel forum poser ce genre de question...
    Pourrais-tu donner la solution à ton problème si elle peut servir à d'autres ?

    Pour les formations, va voir les derniers forums

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Bon, je vais essayer de récapituler du mieux possible en essayant d'etre clair (c'est pas gagné ! ).
    De l'application j'appelle une fonction d'une Dll que j'ai crée a laquelle je passe 2,3 parametres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" __declspec(dllexport) __stdcall void Ouverture(TForm *FicheBase, String TypeObjet, TDataSet *Table, int *TableauChamp);
    (ca va evoluer car pour l'instant ce n'est qu'un test)
    Lors de l'execution de 'void __stdcall Ouverture(...)' la fiche est crée dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TFVierge *FVierge;
    FVierge = new TFVierge(FicheBase);
    FVierge->FicheOwner = FicheBase;
    //etc...
    puis les composants...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //etc...
            if (TypeObjet.operator ==("TListBox"))
            {
            FVierge->ObjetListe = new TListBox(FVierge);
            }
    //etc...
    A la fin de l'execution, je 'lance' la fiche :
    puis j'ai défini a nouveau un membre de TVierge:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FVierge->FormFini = new TFVierge(FVierge);
    //FormFini  est une TForm *
    puis ses variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FVierge->FormFini->ListeFinie = FVierge->NListBox;
    //ListeFinie et NListBox sont des TListBox *
    Ce sont ces variables que j'utilise dans tous les autres évènements du code. J'ai pas trouvé mieux pour l'instant
    Mais je suis ouvert a toutes critiques...et conseils.
    Bonne nuit

  5. #5
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Aie, j'ai dit une betise dans le commentaire :
    Code:

    FVierge->FormFini = new TFVierge(FVierge);
    //FormFini est une TForm *
    FormFini est défini par TFVierge *FormFini.
    Dans le .h, j'avais déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    class TFVierge : public TForm
    ...bon pour l'instant ca donne le resultat escompté.
    En attendant vos réactions...(par trop dures hein! j'chui pas allé a l'école moué ).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/12/2010, 13h06
  2. effacer des composants crée dynamiquement
    Par forzaxelah dans le forum Delphi
    Réponses: 7
    Dernier message: 29/06/2006, 14h14
  3. Problèmes avec une TForm créée dynamiquement
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/03/2005, 11h55
  4. Réponses: 5
    Dernier message: 12/07/2004, 21h00
  5. Réponses: 7
    Dernier message: 08/08/2003, 18h09

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