Adresse mémoire

chrbard - 5 févr. 2001 à 22:54
mahojul Messages postés 27 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009 - 17 févr. 2009 à 11:58
quel est le moyen ene visaul basic d'obtenir en cours d'execution de programme l'adresse mémoire d'une variable ou d'un objet ?
merci

3 réponses

J'ai jamais tester ca, je l'avais trouver avec des docs pour des fonctions API bien special :

- Pour une variable de Type String :
Declare Function Lstrcpy Lib "kernel.dll" (ByVal lpString1 As String, ByVal lpString2 As String) as Long

Dim ptr as Long ' Pointer to I
Dim I as integer ' I itself
ptr = Lstrcpy(I,I) ' assign ptr to point to the address of I

- Pour n'importe quelle Type de variable :
Declare Function VarPtr Lib "kernel.dll" Alias "Lstrcpy" ( _
lpVar1 As Any, _
lpVar2 As Any) as Long

An Example :
Option Explicit
Type Foo
x as Integer
End Type

Sub Main ()
Dim I as Integer
Dim S as String
Dim F as Foo
Dim ptr as Long

ptr = VarPtr(I,I) ' Get the address of 'I'
ptr = VarPtr(ByVal S, ByVal S) ' Must use ByVal keyword w/ string
ptr = VarPtr(F, F) ' Works with type declarations too

End Sub

A+
0
-------------------------------
Réponse au message :
-------------------------------

J'ai jamais tester ca, je l'avais trouver avec des docs pour des fonctions API bien special :

- Pour une variable de Type String :
Declare Function Lstrcpy Lib "kernel.dll" (ByVal lpString1 As String, ByVal lpString2 As String) as Long

Dim ptr as Long ' Pointer to I
Dim I as integer ' I itself
ptr = Lstrcpy(I,I) ' assign ptr to point to the address of I

- Pour n'importe quelle Type de variable :
Declare Function VarPtr Lib "kernel.dll" Alias "Lstrcpy" ( _
lpVar1 As Any, _
lpVar2 As Any) as Long

An Example :
Option Explicit
Type Foo
x as Integer
End Type

Sub Main ()
Dim I as Integer
Dim S as String
Dim F as Foo
Dim ptr as Long

ptr = VarPtr(I,I) ' Get the address of 'I'
ptr = VarPtr(ByVal S, ByVal S) ' Must use ByVal keyword w/ string
ptr = VarPtr(F, F) ' Works with type declarations too

End Sub

A+
-------------------------------

merci bcp pour ces renseignements.
a bientot
0
mahojul Messages postés 27 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
17 févr. 2009 à 11:58
Bonjour,

Lorsque j'exécute le code, voici le message qui me vient :

Run-time error '453':

Can't find DLL entry point Lstrcpy in kernel.dll

J'ai bien fait attention de mettre la DLL kernel.dll et kernel32.dll dans le même répertoire que mon projet.

Voici le code que j'ai mis :

1) Dans un module qui est utilisé pour les déclarations :

    Public Declare Function VarPtr Lib "kernel.dll" Alias "Lstrcpy" (lpVar1 As Any, lpVar2 As Any) As Long
    Type Foo
        x As Integer
    End Type

2) Sur clic d'un bouton :

Dim lCounter as long
lCounter = 0
ptr = VarPtr(lCounter, lCounter) ' Get the address of lCounter

Est-ce que vous auriez une petite idée pour m'aider un peu ? ... Merci vraiment d'avance pour votre aide ... Pour informations, je travaille avec VB6 ...

A tout bientôt ... et salutations à vous tous ...
0
Rejoignez-nous