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 :

problème avec ByVal..


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Déssinateur industriel - Programmeur VB.NET & VBA
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déssinateur industriel - Programmeur VB.NET & VBA
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut problème avec ByVal..
    Salut à tous
    Je ne suis pas un crack en VB.net et j’essaie de m'améliorer tous les jours. Mais la j'ai besoin d'aide.

    L'objet et de transformé un bout de code de VB6 en VB.Net
    En fait, on m'a passé un bout de code dont j'ai besoin en VB6 et moi je suis plus a l'aise en VB.net, donc je le modifie pour pouvoir faire ce que j'ai besoin derrière.

    Alors le bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function GetFloat(ByVal Adress As Long) As Single
            On Error Resume Next
     
            hProcess = OpenProcess(PROCESS_READ_WRITE_QUERY, False, pid)
            Test = ReadProcessMemory(hProcess, ByVal Address, sngbuffer, ByVal 4, 0)
            CloseHandle(hProcess)
            GetFloat = sngbuffer
     
        End Function
    J'ai donc une erreur sur les "ByVal" ou VB Express 2010 me dit ==>
    Expression attendu
    Et je ne sais pas quoi faire

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Je ne vois pas pourquoi il te dit ça sur tes ByVal, la syntaxe semble correcte.

    Cependant tu n'as aucun return dans te Function, or une Function doit obligatoirement retourner quelque chose, sinon tu dois faire des Sub.
    Peut être que c'est ce qui le gène...

    EDIT : Au temps pour moi, je suppose que tes erreurs sont sur les byval a l'intérieur de ton code, ceux là en effet n'ont pas à être là, supprime les simplement

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ByVal s'utilise dans la déclaration de la fonction, pas lors de l'appel. Ton appel à ReadProcessMemory devrait s'écrire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test = ReadProcessMemory(hProcess, Address, sngbuffer, 4, 0)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Cependant tu n'as aucun return dans te Function, or une Function doit obligatoirement retourner quelque chose, sinon tu dois faire des Sub.
    Si, la fonction renvoie bien une valeur :

    En VB tu peux affecter une valeur au nom de la fonction, ce sera la valeur retournée à la fin (oui c'est horrible )

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    oO

    Ok, merci de m'avoir éclairé alors.
    Je vais ajouter ça a ma liste avec les "exit for", "exit sub", etc ^^

  6. #6
    Membre habitué
    Homme Profil pro
    Déssinateur industriel - Programmeur VB.NET & VBA
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déssinateur industriel - Programmeur VB.NET & VBA
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut
    Effectivement j'ai trouvé la solution.

    Je place le ByVal ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByRef nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    et dans la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Function GetFloat(ByVal Address As Integer) As Single
            On Error Resume Next
     
            hProcess = OpenProcess(PROCESS_READ_WRITE_QUERY, False, pid)
            Test = ReadProcessMemory(hProcess, Address, sngbuffer, 4, 0)
            CloseHandle(hProcess)
            GetFloat = sngbuffer
     
        End Function
    Mais j'ai un un autre problème concernant les ListViews
    Toujours en convertions de VB6 vers VB.Net.

    Voila le code dont j'ai le problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Function ViewTimes(ByVal LstView As ListView, ByVal Entree As String, ByVal Key As Integer)
            On Error Resume Next
     
            Dim itmx As ListItems
            itmx = LstView.listItems
            itmx.Item(itmx.count).SubItems(Key) = Entree
     
        End Function
    ListItems non défini ?

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    ListItems n'est pas un type en VB.

    Voilà comment je remplacerais tes 3 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LstView.Items(LstView.Items.Count).SubItems(key) = Entree

  8. #8
    Membre habitué
    Homme Profil pro
    Déssinateur industriel - Programmeur VB.NET & VBA
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déssinateur industriel - Programmeur VB.NET & VBA
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut
    Je viens de tester de marqué ton code en remplacement des 3 lignes. Mias l'érreur suivante est présente sur le "Entree"

    Impossible de convertir une valeur de type 'String' en 'System.Windows.Forms.ListViewItem.ListViewSubItem'. C:\Users\Florent\documents\visual studio 2010\Projects\RBR TEMPS\RBR TEMPS\Module1.vb 141 60 RBR TEMPS

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Je ne trouve pas cette erreur, il m'indique seulement que Subitems est ReadOnly, ce qui se resoud en ajouter .Text apres SubItems(key)
    Il y a toutes les chances que ça resolve aussi ton erreur puisque que ce que tu veux définir est le text du SubItem et non le SubItem lui même

  10. #10
    Membre habitué
    Homme Profil pro
    Déssinateur industriel - Programmeur VB.NET & VBA
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déssinateur industriel - Programmeur VB.NET & VBA
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut
    Effectivement tu as vu juste. Cela est bon.

    Et donc il me reste une seule erreur, toujours sur la listView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Function AjoutLigne()
    Dim itmx As ListItem
    Dim driver As String
    driver = txtJoueur.Text
    If driver = vbNullString Then driver = "unnamed"
        Set itmx = lstTemps.ListItems.Add(, , driver)
        itmx.SubItems(1) = "--:--.--" 'split 1
        itmx.SubItems(2) = "--:--.--" 'split 2
        itmx.SubItems(3) = "--:--.--" 'temps
        itmx.SubItems(4) = "0" '%
        itmx.SubItems(5) = Now '%
        itmx.Selected = True
    End Function
    Donc j'avais une erreur sur le "ListItem" sur la ligne "Dim itmx as ListItem".

    J'ai modifié comme suit : "Dim itmx As ListViewItem" Cela à l'ai d'être bon car l’erreur à disparu.

    L'autre erreur de cette procédure est :
    "itmx = lstTemps.Items(, , driver)"

    L'érreur marque :
    La résolution de surcharge à échoué, car aucun "Item" accessible ce nombre d'argument

    La je suis perdue

  11. #11
    Membre habitué
    Homme Profil pro
    Déssinateur industriel - Programmeur VB.NET & VBA
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déssinateur industriel - Programmeur VB.NET & VBA
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut
    Bon j'ai trouvé comment régler le problème. Je vire la ListView et fonctionne avec un autre composant.

    Merci de votre aide

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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