ByVal [Résolu]

Signaler
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011
-
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011
-
Bonjour à tous le monde.

J’essaie de modifier un code de VB6 à VB.Net mais je suis bloqué sur une ligne.

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 une erreur sur les 2 "ByVal" ou on me dit Expression attendu.

Sur tout le code, j'ai a peu prêt réussi à modifier le passage de VB6 à VB.Net sauf cette erreur.

Si quelqu'un se sent l'âme de m'aider ?

8 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ben ne le met pas ^^
suffit de bien déclarer ton API.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
normal, tu passes un Long dans ta procédure, il n'y a pas lieu.

déclare ton parametre en Integer, comme fait dans ta declaration d'API

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011

Dévellope ton idée de déclarer l'api si tu veut bien.

J'ai éffectivement viré les ByVal, mais au final j'ai une érreur sur
"Test = ReadProcessMemory(hProcess, Address, sngbuffer, 4, 0)"

Address ==> "Address n'est pas déclaré, il peut être inaccessible en raison de son niveau de protection.

de la je peut générer soit :
- un Stub de méthode pour address
- un stub de propriété pour address
- un champ pour address.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
oui, tu as oublié un 'd'...

il faut voir ta declaration d'API, mais a priori ca roule comme tu l'a fait

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011

Excuse moi, je ne te suit pas trop, j'ai apprit tout seul la programmation VB.Net et apprend encore tous les jours.

j'ai oublié un 'd',,,, sa veut dire quoi ?

Pour les api voici:
'Option Strict Off
'Option Explicit On
Imports VB = Microsoft.VisualBasic
Imports System.Data.OleDb

Module Module1


    '=========================================================
    Private Declare Function GetForegroundWindow Lib "user32" () As Integer
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer
    Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal blnheritHandle As Integer, ByVal dwAppProcessId As Integer) As Integer
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
    'Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByRef lpBaseAddress As System.Delegate, ByRef lpBuffer As System.Delegate, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByRef lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByRef lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
place le ByVal ici :

Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer

et ajoutes le 'd' manquant au nom de ta variable :
Code Visual Basic :
Public Function GetFloat(ByVal Address As Long) As Single
On Error Resume Next

hProcess = OpenProcess(PROCESS_READ_WRITE_QUERY, False, pid)
Test = ReadProcessMemory(hProcess, Address, sngbuffer, ByVal 4 ,0)
CloseHandle(hProcess)
GetFloat = sngbuffer
End Function


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011

Sérieux, pour le "d" de address, j'ai honte

Sinon j'ai effectué la manip que tu m'a dit au niveau de ByVal, la c'est une autre erreur qui apparaît. Je met en image l'erreur.
/URL Uploaded with ImageShack.us/img
Messages postés
22
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
10 août 2011

Ouaaaa sa marche, j'apprend un peu plus tous les jours. Maintenant il me reste un souci à régler et je serais bon.