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 :

stockage d'une référence


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut stockage d'une référence
    bonjour à tous ,
    je voudrais stocker une réference a un objet dans une ref classe
    et je ne trouve pas soit la méthode ou la syntaxe de déclaration appropriée.
    exemple:
    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
    using namespace System;
    //using namespace System::Collections;
     
    public ref class toto
    {
    public:    
        String ^varRef;
     
        void Set(String ^% v)
        {        
            v="affection par référence";
            varRef=v; // fait une copie ne permet pas de garder la reference.
            varRef="fonctionne ? (non  normal)"; // je veux stocker la référence
        }
    };
     
    int main(array<System::String ^> ^args)
    {
        Console::WriteLine(L"Hello World");
     
        String ^s="abc";
        toto ^c= gcnew toto;    
        c->Set(s);
       // s contient :"affection par référence" 
    }
    le passage par référence de la string "s" dans la méthode Set permet la modification de la source avec la variable "v" (pas de problème).
    mais comment garder la référence ou une adresse de la variable passée en référence dans ma classe ?
    si vous avez une idée de la manière de procéder je suis preneur...
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Première question : Est-ce qu'en C# l'équivalent de cette chose serait possible. Je ne crois pas. Il va donc falloir sortir de la partie pure CLI du langage, et aller vers la partie plus C++.

    On pourrait vouloir stocker un pointeur vers la chaîne, sauf que la CLR est en droit de bouger cette chaîne en mémoire à sa convenance. Il va donc falloir la pinner. Donc, je partirais vers l'utilisation d'un gcroot, ou directement de GCHANDLE. Mais je ne sais pas trop si ça pourrait marcher... Peut-être faudra-t-il modifier l'interface de set.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    merci pour la piste ,gchandle à l'air d'être la bonne voie , même si ça ne fonctionne pas encore !.
    pfff c'est si simple à faire en C++ et la je galère.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    j'ai fais ceci que ne fonctionne pas comme je veux:
    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
    public ref class toto
    {
    public:		
    	IntPtr handle; 
    	void Attach(String ^% v)
    	{		
    		v="affection par référence"; // a ce moment s est egal à:affection par référence, normal !!!
    		GCHandle gcHandle = GCHandle::Alloc(v);
    		handle = static_cast<IntPtr>(GCHandle::ToIntPtr(gcHandle));
    	}
    	void affect(String ^str)
    	{
       	        String ^ targetStr = safe_cast< String ^ >(static_cast<GCHandle>(handle).Target);
    		// ici targetStr == "affection par référence"
    		targetStr=str; // a ce moment s est toujours egal à :affection par référence et pas à toto 
    	}
    };
     
     
    int main(array<System::String ^> ^args)
    {
        String ^s="abc";
        toto ^c = gcnew toto;
        c->Attach(s);
        c->affect("toto"); // n'affecte pas s 
        Console::WriteLine("s==toto {0}",s=="toto"); // affiche false
    }
    j'ai fais des essais avec gcroot non concluants ,meme problème.
    je veux vraiment stocker l'adresse de la référence et pas une copie du contenu ..
    si quelqu'un à une idée sur la chose j'en serais ravi.

  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
    Salut

    Oula, ca fait longtemps que j'ai pas fait de C++

    j'ai pas trop compris ce que tu voulais faire, en même temps, j'ai 39,5°C de fièvre

    t'as essayé avec le % ?
    http://dotnet.developpez.com/faq/cpp...ckingreference

    t'as le pointeur interne aussi : http://dotnet.developpez.com/faq/cpp...nteriorpointer
    voir le pointeur épingle : http://dotnet.developpez.com/faq/cpp...syntaxe#pinptr

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    merci pour ces pistes je vais regarder si ça peut me convenir ,
    Soigne toi bien

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  2. Comment avoir une référence sur une Vue
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 12/08/2005, 10h03
  3. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 12h33
  4. [SOAP][Web Service] erreur création d'une référence Web
    Par Maximil ian dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/06/2005, 13h29
  5. Une référence à un élément de sa propre table
    Par szdavid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/06/2004, 10h46

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