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

VB.NET Discussion :

Comment passer les types (de base) : strings, bool, int .. par Référence et pas par clonage


Sujet :

VB.NET

Vue hybride

themine702 Comment passer les types (de... 24/12/2018, 19h44
Miska59 Bonsoir, j'ai rien... 24/12/2018, 20h22
Phil Rob Si je comprends bien, tu... 24/12/2018, 22h27
themine702 @Miska59 merci d'avoir... 25/12/2018, 03h02
MABROUKI bonjour ... 25/12/2018, 09h21
Phil Rob @Mabrouki Là vraiment,... 25/12/2018, 09h35
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut Comment passer les types (de base) : strings, bool, int .. par Référence et pas par clonage
    bonjour alors ma question est : "comment passer les types : strings, bool, int ... par Référence et pas par clonage"

    et par passer je veut pas dire la passer dans une fonction ou une sub mais en faire un Alias example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim bb as integer = 8
    Dim alias_de_bb = bb
     
    alias_de_bb = 23
     
    msgbox(bb) 'et là ça doit me donner un message avec : 23
    et là quand je modifie l'alias ça change la valeur qui est dans bb, je sais que je peut le faire en utilisant le type Object au lieu de integer mais en sachant que mon code va devoir s'éxecuter quelques dizaines de millions de fois par seconde je peut pas vraiment utiliser le type object car il est très lourd et me fait perdre beacoups de la performance

    (y'a quelques jours j'ai posé une question très similaire à celle là mais elle n'ont rien à voir cette question est litéralement l'inverse de l'autre question)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 323
    Par défaut
    Bonsoir,

    msgbox(bb) 'et là ça doit me donner un message avec : 23
    j'ai rien compris ce que vous voulez faire mais pour obtenir la valeur 23.

    voici un exemple pour obtenir la valeur 23 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim valeur As Integer = 8
            Dim alias_de_bb = 23
            Dim compte As Integer = 0
            compte = (alias_de_bb / valeur) 'tu divise la alias par la valeur
            Dim resulta As Integer = (valeur * compte) 'tu multi la valeur par la valeur tu obtient par le compte.
            Dim ths As Integer = (resulta - alias_de_bb) 'tu reduit la somme total de alias
            Dim thr As Integer = (resulta - ths) 'tu reduit la somme ths par le résulta
            MsgBox(thr) 'tu obtient la valeur alias = 23
        End Sub
    mème du tu change la valeur alias tu obtient toujours la mème valeur dans msg.

    Bonne soirée et bonne fête de Noël.

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Si je comprends bien, tu voudrais pouvoir travailler comme en C, avec des pointeurs :

    int bb = 8;
    int *alias_de_bb = &bb;

    A ma connaissance, cela n'est pas possible en VB.
    En VB, on dispose d'une certaine marge de manœuvre au niveau des arguments des fonctions et des procédures avec ByRef et ByVal, et aussi une forme de pointeur sur fonction (AdresseOf(une_Procedure)) mais dont l'usage ne répond pas à ta demande.

    Si quelqu'un a une solution, çà m'intéresse ...

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut
    @Miska59 merci d'avoir répondu mais s'était pas ça que je cherché à faire, mais merci quand même

    @phil Rob wé c'est exactement ce que je cherché à faire :/ , mais j'ai quand même trouver un semblant de solution

    qui est de créer un object (class) gerne : "EntierQuiPasseParRef" et de lui donner une propriété Valeur qui est de type entier

    et puis j'utilise ce type au lieu d'utiliser le type integer de base

    ça reste pas parfait mais ça marche

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Marshal.AllocHGlobal est ton ami...

    Le code qui suit fait exactement le travail du code c donné par Phil Rob

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int bb = 8;
    int *alias_de_bb = &bb;
    code vb.net :
    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
     
     
    Imports System.Runtime.InteropServices
    Public Class Form1
     
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
     
     
            Dim bb As Integer = 8
            Dim ptr As IntPtr = Marshal.AllocHGlobal(4) ' 4 parce que la taille de Integer est 4 octets
     
            Marshal.WriteInt32(ptr, bb)
     
     
     
            Dim alias_de_bb As Integer = Marshal.ReadInt32(ptr)
            alias_de_bb += 15
     
            MsgBox(alias_de_bb.ToString) 'et là ça doit me donner un message avec : 23
     
            MsgBox(bb.ToString)
            Marshal.FreeHGlobal(ptr) 'n'oublie pas de liberer le pointeur ptr utilisé 
     
        End Sub
     
     
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim MyInt32 As Integer = 0
            Dim MyPtr As IntPtr = MyInt32
        End Sub
    End Class
    bon code...

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    @Mabrouki
    Là vraiment, j'apprends ! Il est vrai que je ne me suis jamais intéressé à l'InteropServices ...
    Très bonne journée à tous ...

Discussions similaires

  1. Comment énumérer les types Int32, String, Boolean ?
    Par BasicZX81 dans le forum VB.NET
    Réponses: 9
    Dernier message: 12/08/2012, 13h18
  2. Réponses: 1
    Dernier message: 09/07/2008, 11h47
  3. Réponses: 2
    Dernier message: 20/10/2006, 08h23
  4. Comment passer les arguments à un script perl
    Par belgampaul dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2005, 12h52
  5. Réponses: 11
    Dernier message: 22/12/2003, 21h06

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