begin process at 2010 02 10 12:50:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Pointeur en VB...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pointeur en VB...

samedi 12 avril 2003 à 13:24:03 | Pointeur en VB...

jockos

Ma question est simple...

Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...

J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...

Parce que l'instruction :

strContenu2 = strContenu1

recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...

J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :

Dim pointeur as Long

pointeur = StrPtr(strContenu1)

Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
Il doit y avoir une API...

Mais laquelle... je cherche désespérement depuis hier...

Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...

Merci pour votre aide...

samedi 12 avril 2003 à 14:59:19 | Re : Pointeur en VB...

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.

Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com

DARK SIDIOUS

[Responsable de la rubrique API du site www.ProgOtoP.net]


-------------------------------
Réponse au message :
-------------------------------

> Ma question est simple...
>
> Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
>
> J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
>
> Parce que l'instruction :
>
> strContenu2 = strContenu1
>
> recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
>
> J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
>
> Dim pointeur as Long
>
> pointeur = StrPtr(strContenu1)
>
> Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> Il doit y avoir une API...
>
> Mais laquelle... je cherche désespérement depuis hier...
>
> Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
>
> Merci pour votre aide...
>
>
samedi 12 avril 2003 à 15:11:51 | Re : Pointeur en VB...

jockos

CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.

C'est justement ce que je veux pas faire...

Je veux que mes 2 variables pointes sur le même emplacement mémoire...
Qu'elles se le partagent si tu préfères...

Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...

Or l'API CopyMémory ne permet pas de faire cela...

Merci quand même pour ton aide...


-------------------------------
Réponse au message :
-------------------------------

> Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
>
> Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
>
> DARK SIDIOUS
>
> [Responsable de la rubrique API du site www.ProgOtoP.net]
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Ma question est simple...
> >
> > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> >
> > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> >
> > Parce que l'instruction :
> >
> > strContenu2 = strContenu1
> >
> > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> >
> > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> >
> > Dim pointeur as Long
> >
> > pointeur = StrPtr(strContenu1)
> >
> > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > Il doit y avoir une API...
> >
> > Mais laquelle... je cherche désespérement depuis hier...
> >
> > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> >
> > Merci pour votre aide...
> >
> >
>
samedi 12 avril 2003 à 15:59:21 | Re : Pointeur en VB...

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?

Si c'est cà, il te suffit de copier le contenu du pointeur, non ?

DARK SIDIOUS

[Responsable de la rubrique API du site www.ProgOtoP.net]


-------------------------------
Réponse au message :
-------------------------------

> CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
>
> C'est justement ce que je veux pas faire...
>
> Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> Qu'elles se le partagent si tu préfères...
>
> Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
>
> Or l'API CopyMémory ne permet pas de faire cela...
>
> Merci quand même pour ton aide...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> >
> > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> >
> > DARK SIDIOUS
> >
> > [Responsable de la rubrique API du site www.ProgOtoP.net]
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Ma question est simple...
> > >
> > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > >
> > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > >
> > > Parce que l'instruction :
> > >
> > > strContenu2 = strContenu1
> > >
> > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > >
> > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > >
> > > Dim pointeur as Long
> > >
> > > pointeur = StrPtr(strContenu1)
> > >
> > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > Il doit y avoir une API...
> > >
> > > Mais laquelle... je cherche désespérement depuis hier...
> > >
> > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > >
> > > Merci pour votre aide...
> > >
> > >
> >
>
samedi 12 avril 2003 à 16:57:59 | Re : Pointeur en VB...

jockos

Exactement...

Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
Il y a 2 choses à préciser :
- l'adresse mémoire du début de la données
- sa longueur (offset)

Et éventuellement son type de données pour l'interprétation du contenu...

Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
Mais je veux que cette données soit accessible depuis 2 variables VB...

Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...

Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).

Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.

Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?





-------------------------------
Réponse au message :
-------------------------------

> Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
>
> Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
>
> DARK SIDIOUS
>
> [Responsable de la rubrique API du site www.ProgOtoP.net]
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> >
> > C'est justement ce que je veux pas faire...
> >
> > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > Qu'elles se le partagent si tu préfères...
> >
> > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> >
> > Or l'API CopyMémory ne permet pas de faire cela...
> >
> > Merci quand même pour ton aide...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > >
> > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > >
> > > DARK SIDIOUS
> > >
> > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Ma question est simple...
> > > >
> > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > >
> > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > >
> > > > Parce que l'instruction :
> > > >
> > > > strContenu2 = strContenu1
> > > >
> > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > >
> > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > >
> > > > Dim pointeur as Long
> > > >
> > > > pointeur = StrPtr(strContenu1)
> > > >
> > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > Il doit y avoir une API...
> > > >
> > > > Mais laquelle... je cherche désespérement depuis hier...
> > > >
> > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > >
> > > > Merci pour votre aide...
> > > >
> > > >
> > >
> >
>
samedi 12 avril 2003 à 18:01:58 | Re : Pointeur en VB...

stevebelgium

I'm going to give a try ; don't shoot me !


Private Sub Command1_Click()

Dim strContenu1 As String

strContenu1 = "aaa"

test strContenu1


End Sub

Sub test(ByRef strContenu2 As String)

' NOT byVal

MsgBox strContenu2

'pointer strContenu2 same as strContenu1

End Sub




-------------------------------
Réponse au message :
-------------------------------

> Exactement...
>
> Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
> Il y a 2 choses à préciser :
> - l'adresse mémoire du début de la données
> - sa longueur (offset)
>
> Et éventuellement son type de données pour l'interprétation du contenu...
>
> Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
> Mais je veux que cette données soit accessible depuis 2 variables VB...
>
> Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
> Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...
>
> Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).
>
> Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.
>
> Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?
>
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
> >
> > Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
> >
> > DARK SIDIOUS
> >
> > [Responsable de la rubrique API du site www.ProgOtoP.net]
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> > >
> > > C'est justement ce que je veux pas faire...
> > >
> > > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > > Qu'elles se le partagent si tu préfères...
> > >
> > > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> > >
> > > Or l'API CopyMémory ne permet pas de faire cela...
> > >
> > > Merci quand même pour ton aide...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > > >
> > > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > > >
> > > > DARK SIDIOUS
> > > >
> > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Ma question est simple...
> > > > >
> > > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > > >
> > > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > > >
> > > > > Parce que l'instruction :
> > > > >
> > > > > strContenu2 = strContenu1
> > > > >
> > > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > > >
> > > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > > >
> > > > > Dim pointeur as Long
> > > > >
> > > > > pointeur = StrPtr(strContenu1)
> > > > >
> > > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > > Il doit y avoir une API...
> > > > >
> > > > > Mais laquelle... je cherche désespérement depuis hier...
> > > > >
> > > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > > >
> > > > > Merci pour votre aide...
> > > > >
> > > > >
> > > >
> > >
> >
>
samedi 12 avril 2003 à 18:30:12 | Re : Pointeur en VB...

jockos

Je connais la différence entre ByVal et ByRef au niveau des passages de paramètres dans une fonction VB...
Et ça ne répond pas à mon problème, car tu n'a pas déclaré une 2ème variable strContenu2. C'est le paramètre...
Et comme il est passé par référence ByRef(on dit aussi par adresse), on accède bien au même contenu mémoire...

JE suis Ok avec cela, mais par contre, comme je le dis, ça ne répond pas à mon problème, car tu n'as pas déclaré une véritable 2ème variable différente...

Je voudrais un truc du genre :

**********************
Dim strContenu1 As String
Dim pointeur As Long
Dim strContenu2 As String

strContenu1 = "123fdjhjjjkn,gdfsnlkjhkdshlk"

'Récupère l'adresse du bloc mémoire de strContenu1
pointeur = StrPtr(strContenu1)

FaitPointer(strContenu2,pointeur,len(strContenu1))

Je veux que la fonction 'FaitPointer' fasse pointer strContenu2 sur la zone mémoire contenant la variable strContenu1.

Ainsi, ces 2 variables se partage la même zone mémoire.

Si strContenu1 est modifié, alors strContenu2 est modifié...

C'est EXACTEMENT la notion de pointeurs, très utilisé en C, C++ ....... et très très pratique au niveau performance...

Mais en VB.... :( ........ j'commence à baisser les bras....



-------------------------------
Réponse au message :
-------------------------------

> I'm going to give a try ; don't shoot me !
>
>
> Private Sub Command1_Click()
>
> Dim strContenu1 As String
>
> strContenu1 = "aaa"
>
> test strContenu1
>
>
> End Sub
>
> Sub test(ByRef strContenu2 As String)
>
> ' NOT byVal
>
> MsgBox strContenu2
>
> 'pointer strContenu2 same as strContenu1
>
> End Sub
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Exactement...
> >
> > Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
> > Il y a 2 choses à préciser :
> > - l'adresse mémoire du début de la données
> > - sa longueur (offset)
> >
> > Et éventuellement son type de données pour l'interprétation du contenu...
> >
> > Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
> > Mais je veux que cette données soit accessible depuis 2 variables VB...
> >
> > Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
> > Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...
> >
> > Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).
> >
> > Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.
> >
> > Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?
> >
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
> > >
> > > Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
> > >
> > > DARK SIDIOUS
> > >
> > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > > > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> > > >
> > > > C'est justement ce que je veux pas faire...
> > > >
> > > > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > > > Qu'elles se le partagent si tu préfères...
> > > >
> > > > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> > > >
> > > > Or l'API CopyMémory ne permet pas de faire cela...
> > > >
> > > > Merci quand même pour ton aide...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > > > >
> > > > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > > > >
> > > > > DARK SIDIOUS
> > > > >
> > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Ma question est simple...
> > > > > >
> > > > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > > > >
> > > > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > > > >
> > > > > > Parce que l'instruction :
> > > > > >
> > > > > > strContenu2 = strContenu1
> > > > > >
> > > > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > > > >
> > > > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > > > >
> > > > > > Dim pointeur as Long
> > > > > >
> > > > > > pointeur = StrPtr(strContenu1)
> > > > > >
> > > > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > > > Il doit y avoir une API...
> > > > > >
> > > > > > Mais laquelle... je cherche désespérement depuis hier...
> > > > > >
> > > > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > > > >
> > > > > > Merci pour votre aide...
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
samedi 12 avril 2003 à 18:59:06 | Re : Pointeur en VB...

stevebelgium

Here is your answer !

just copy paste into a project

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapAlloc Lib "kernel32" _
(ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function HeapFree Lib "kernel32" _
(ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
Private Declare Sub CopyMemoryWrite Lib "kernel32" Alias _
"RtlMoveMemory" (ByVal Destination As Long, Source As Any, ByVal Length As Long)
Private Declare Sub CopyMemoryRead Lib "kernel32" Alias _
"RtlMoveMemory" (Destination As Any, ByVal Source As Long, ByVal Length As Long)

Private Sub Form_Load()
Dim ptr As Long 'int * ptr;
Dim hHeap As Long
hHeap = GetProcessHeap()
ptr = HeapAlloc(hHeap, 0, 2) 'an integer in Visual Basic is 2 bytes
If ptr <> 0 Then
'memory was allocated
'do stuff
Dim i As Integer
i = 12
CopyMemoryWrite ptr, i, 2 ' an intger is two bytes
Dim j As Integer
CopyMemoryRead j, ptr, 2
MsgBox "The adress of ptr is " & CStr(ptr) & _
vbCrLf & "and the value is " & CStr(j)
HeapFree GetProcessHeap(), 0, ptr

MsgBox i & " " & j
End If
End Sub





-------------------------------
Réponse au message :
-------------------------------

> Je connais la différence entre ByVal et ByRef au niveau des passages de paramètres dans une fonction VB...
> Et ça ne répond pas à mon problème, car tu n'a pas déclaré une 2ème variable strContenu2. C'est le paramètre...
> Et comme il est passé par référence ByRef(on dit aussi par adresse), on accède bien au même contenu mémoire...
>
> JE suis Ok avec cela, mais par contre, comme je le dis, ça ne répond pas à mon problème, car tu n'as pas déclaré une véritable 2ème variable différente...
>
> Je voudrais un truc du genre :
>
> **********************
> Dim strContenu1 As String
> Dim pointeur As Long
> Dim strContenu2 As String
>
> strContenu1 = "123fdjhjjjkn,gdfsnlkjhkdshlk"
>
> 'Récupère l'adresse du bloc mémoire de strContenu1
> pointeur = StrPtr(strContenu1)
>
> FaitPointer(strContenu2,pointeur,len(strContenu1))
>
> Je veux que la fonction 'FaitPointer' fasse pointer strContenu2 sur la zone mémoire contenant la variable strContenu1.
>
> Ainsi, ces 2 variables se partage la même zone mémoire.
>
> Si strContenu1 est modifié, alors strContenu2 est modifié...
>
> C'est EXACTEMENT la notion de pointeurs, très utilisé en C, C++ ....... et très très pratique au niveau performance...
>
> Mais en VB.... :( ........ j'commence à baisser les bras....
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > I'm going to give a try ; don't shoot me !
> >
> >
> > Private Sub Command1_Click()
> >
> > Dim strContenu1 As String
> >
> > strContenu1 = "aaa"
> >
> > test strContenu1
> >
> >
> > End Sub
> >
> > Sub test(ByRef strContenu2 As String)
> >
> > ' NOT byVal
> >
> > MsgBox strContenu2
> >
> > 'pointer strContenu2 same as strContenu1
> >
> > End Sub
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Exactement...
> > >
> > > Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
> > > Il y a 2 choses à préciser :
> > > - l'adresse mémoire du début de la données
> > > - sa longueur (offset)
> > >
> > > Et éventuellement son type de données pour l'interprétation du contenu...
> > >
> > > Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
> > > Mais je veux que cette données soit accessible depuis 2 variables VB...
> > >
> > > Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
> > > Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...
> > >
> > > Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).
> > >
> > > Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.
> > >
> > > Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?
> > >
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
> > > >
> > > > Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
> > > >
> > > > DARK SIDIOUS
> > > >
> > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > > > > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> > > > >
> > > > > C'est justement ce que je veux pas faire...
> > > > >
> > > > > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > > > > Qu'elles se le partagent si tu préfères...
> > > > >
> > > > > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> > > > >
> > > > > Or l'API CopyMémory ne permet pas de faire cela...
> > > > >
> > > > > Merci quand même pour ton aide...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > > > > >
> > > > > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > > > > >
> > > > > > DARK SIDIOUS
> > > > > >
> > > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Ma question est simple...
> > > > > > >
> > > > > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > > > > >
> > > > > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > > > > >
> > > > > > > Parce que l'instruction :
> > > > > > >
> > > > > > > strContenu2 = strContenu1
> > > > > > >
> > > > > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > > > > >
> > > > > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > > > > >
> > > > > > > Dim pointeur as Long
> > > > > > >
> > > > > > > pointeur = StrPtr(strContenu1)
> > > > > > >
> > > > > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > > > > Il doit y avoir une API...
> > > > > > >
> > > > > > > Mais laquelle... je cherche désespérement depuis hier...
> > > > > > >
> > > > > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > > > > >
> > > > > > > Merci pour votre aide...
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
samedi 12 avril 2003 à 19:20:24 | Re : Pointeur en VB...

stevebelgium

Use This link to know more :

http://www.codeproject.com/useritems/how_to_do_pointers_in_visual_basic.asp


-------------------------------
Réponse au message :
-------------------------------

> Here is your answer !
>
> just copy paste into a project
>
> Option Explicit
>
> Private Declare Sub CopyMemory Lib "kernel32" _
> Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
> Private Declare Function GetProcessHeap Lib "kernel32" () As Long
> Private Declare Function HeapAlloc Lib "kernel32" _
> (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
> Private Declare Function HeapFree Lib "kernel32" _
> (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
> Private Declare Sub CopyMemoryWrite Lib "kernel32" Alias _
> "RtlMoveMemory" (ByVal Destination As Long, Source As Any, ByVal Length As Long)
> Private Declare Sub CopyMemoryRead Lib "kernel32" Alias _
> "RtlMoveMemory" (Destination As Any, ByVal Source As Long, ByVal Length As Long)
>
> Private Sub Form_Load()
> Dim ptr As Long 'int * ptr;
> Dim hHeap As Long
> hHeap = GetProcessHeap()
> ptr = HeapAlloc(hHeap, 0, 2) 'an integer in Visual Basic is 2 bytes
> If ptr <> 0 Then
> 'memory was allocated
> 'do stuff
> Dim i As Integer
> i = 12
> CopyMemoryWrite ptr, i, 2 ' an intger is two bytes
> Dim j As Integer
> CopyMemoryRead j, ptr, 2
> MsgBox "The adress of ptr is " & CStr(ptr) & _
> vbCrLf & "and the value is " & CStr(j)
> HeapFree GetProcessHeap(), 0, ptr
>
> MsgBox i & " " & j
> End If
> End Sub
>
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Je connais la différence entre ByVal et ByRef au niveau des passages de paramètres dans une fonction VB...
> > Et ça ne répond pas à mon problème, car tu n'a pas déclaré une 2ème variable strContenu2. C'est le paramètre...
> > Et comme il est passé par référence ByRef(on dit aussi par adresse), on accède bien au même contenu mémoire...
> >
> > JE suis Ok avec cela, mais par contre, comme je le dis, ça ne répond pas à mon problème, car tu n'as pas déclaré une véritable 2ème variable différente...
> >
> > Je voudrais un truc du genre :
> >
> > **********************
> > Dim strContenu1 As String
> > Dim pointeur As Long
> > Dim strContenu2 As String
> >
> > strContenu1 = "123fdjhjjjkn,gdfsnlkjhkdshlk"
> >
> > 'Récupère l'adresse du bloc mémoire de strContenu1
> > pointeur = StrPtr(strContenu1)
> >
> > FaitPointer(strContenu2,pointeur,len(strContenu1))
> >
> > Je veux que la fonction 'FaitPointer' fasse pointer strContenu2 sur la zone mémoire contenant la variable strContenu1.
> >
> > Ainsi, ces 2 variables se partage la même zone mémoire.
> >
> > Si strContenu1 est modifié, alors strContenu2 est modifié...
> >
> > C'est EXACTEMENT la notion de pointeurs, très utilisé en C, C++ ....... et très très pratique au niveau performance...
> >
> > Mais en VB.... :( ........ j'commence à baisser les bras....
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > I'm going to give a try ; don't shoot me !
> > >
> > >
> > > Private Sub Command1_Click()
> > >
> > > Dim strContenu1 As String
> > >
> > > strContenu1 = "aaa"
> > >
> > > test strContenu1
> > >
> > >
> > > End Sub
> > >
> > > Sub test(ByRef strContenu2 As String)
> > >
> > > ' NOT byVal
> > >
> > > MsgBox strContenu2
> > >
> > > 'pointer strContenu2 same as strContenu1
> > >
> > > End Sub
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Exactement...
> > > >
> > > > Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
> > > > Il y a 2 choses à préciser :
> > > > - l'adresse mémoire du début de la données
> > > > - sa longueur (offset)
> > > >
> > > > Et éventuellement son type de données pour l'interprétation du contenu...
> > > >
> > > > Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
> > > > Mais je veux que cette données soit accessible depuis 2 variables VB...
> > > >
> > > > Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
> > > > Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...
> > > >
> > > > Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).
> > > >
> > > > Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.
> > > >
> > > > Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
> > > > >
> > > > > Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
> > > > >
> > > > > DARK SIDIOUS
> > > > >
> > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > > > > > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> > > > > >
> > > > > > C'est justement ce que je veux pas faire...
> > > > > >
> > > > > > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > > > > > Qu'elles se le partagent si tu préfères...
> > > > > >
> > > > > > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> > > > > >
> > > > > > Or l'API CopyMémory ne permet pas de faire cela...
> > > > > >
> > > > > > Merci quand même pour ton aide...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > > > > > >
> > > > > > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > > > > > >
> > > > > > > DARK SIDIOUS
> > > > > > >
> > > > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > > > >
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Ma question est simple...
> > > > > > > >
> > > > > > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > > > > > >
> > > > > > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > > > > > >
> > > > > > > > Parce que l'instruction :
> > > > > > > >
> > > > > > > > strContenu2 = strContenu1
> > > > > > > >
> > > > > > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > > > > > >
> > > > > > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > > > > > >
> > > > > > > > Dim pointeur as Long
> > > > > > > >
> > > > > > > > pointeur = StrPtr(strContenu1)
> > > > > > > >
> > > > > > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > > > > > Il doit y avoir une API...
> > > > > > > >
> > > > > > > > Mais laquelle... je cherche désespérement depuis hier...
> > > > > > > >
> > > > > > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > > > > > >
> > > > > > > > Merci pour votre aide...
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>
dimanche 13 avril 2003 à 14:41:56 | Re : Pointeur en VB...

jockos

Désolé d'être exigent... mais c'est toujours pas cela...
Tes propositions sont très bonnes et c'est vraiment sympa d'essayer de trouver la solution, mais ça ne marche toujours pas...

CopyMemoryRead va lire la valeur qui se trouve à une certaine adresse mémoire et la copie dasn une variable de destinataion ( j dans l'exemple de code).

la variable i et j ne pointe donc pas sur la même zone mémoire...

pour tester, il te suffit de faire à la fin de ton code :

i = 20

Msgbox Cstr(i)+" "+cstr(j)

Et là, tu remarques que j ne vaut pas 20... il ne pointe donc pas sur la même zone mémoire que la variable i (car sinon, il vaudrait aussi 20).

Bien essayé en tous cas... mais il faut laisser tomber l'API CopyMemory, car je ne veux surtout pas copier une zone mémoire, je veux simplement partagé une seule et unique zone mémoire pour plusieurs variables . (on dit qu'elles pointent sur cette emplacement mémoire).

Dur dur en VB......... :(

-------------------------------
Réponse au message :
-------------------------------

> Here is your answer !
>
> just copy paste into a project
>
> Option Explicit
>
> Private Declare Sub CopyMemory Lib "kernel32" _
> Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
> Private Declare Function GetProcessHeap Lib "kernel32" () As Long
> Private Declare Function HeapAlloc Lib "kernel32" _
> (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
> Private Declare Function HeapFree Lib "kernel32" _
> (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
> Private Declare Sub CopyMemoryWrite Lib "kernel32" Alias _
> "RtlMoveMemory" (ByVal Destination As Long, Source As Any, ByVal Length As Long)
> Private Declare Sub CopyMemoryRead Lib "kernel32" Alias _
> "RtlMoveMemory" (Destination As Any, ByVal Source As Long, ByVal Length As Long)
>
> Private Sub Form_Load()
> Dim ptr As Long 'int * ptr;
> Dim hHeap As Long
> hHeap = GetProcessHeap()
> ptr = HeapAlloc(hHeap, 0, 2) 'an integer in Visual Basic is 2 bytes
> If ptr <> 0 Then
> 'memory was allocated
> 'do stuff
> Dim i As Integer
> i = 12
> CopyMemoryWrite ptr, i, 2 ' an intger is two bytes
> Dim j As Integer
> CopyMemoryRead j, ptr, 2
> MsgBox "The adress of ptr is " & CStr(ptr) & _
> vbCrLf & "and the value is " & CStr(j)
> HeapFree GetProcessHeap(), 0, ptr
>
> MsgBox i & " " & j
> End If
> End Sub
>
>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Je connais la différence entre ByVal et ByRef au niveau des passages de paramètres dans une fonction VB...
> > Et ça ne répond pas à mon problème, car tu n'a pas déclaré une 2ème variable strContenu2. C'est le paramètre...
> > Et comme il est passé par référence ByRef(on dit aussi par adresse), on accède bien au même contenu mémoire...
> >
> > JE suis Ok avec cela, mais par contre, comme je le dis, ça ne répond pas à mon problème, car tu n'as pas déclaré une véritable 2ème variable différente...
> >
> > Je voudrais un truc du genre :
> >
> > **********************
> > Dim strContenu1 As String
> > Dim pointeur As Long
> > Dim strContenu2 As String
> >
> > strContenu1 = "123fdjhjjjkn,gdfsnlkjhkdshlk"
> >
> > 'Récupère l'adresse du bloc mémoire de strContenu1
> > pointeur = StrPtr(strContenu1)
> >
> > FaitPointer(strContenu2,pointeur,len(strContenu1))
> >
> > Je veux que la fonction 'FaitPointer' fasse pointer strContenu2 sur la zone mémoire contenant la variable strContenu1.
> >
> > Ainsi, ces 2 variables se partage la même zone mémoire.
> >
> > Si strContenu1 est modifié, alors strContenu2 est modifié...
> >
> > C'est EXACTEMENT la notion de pointeurs, très utilisé en C, C++ ....... et très très pratique au niveau performance...
> >
> > Mais en VB.... :( ........ j'commence à baisser les bras....
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > I'm going to give a try ; don't shoot me !
> > >
> > >
> > > Private Sub Command1_Click()
> > >
> > > Dim strContenu1 As String
> > >
> > > strContenu1 = "aaa"
> > >
> > > test strContenu1
> > >
> > >
> > > End Sub
> > >
> > > Sub test(ByRef strContenu2 As String)
> > >
> > > ' NOT byVal
> > >
> > > MsgBox strContenu2
> > >
> > > 'pointer strContenu2 same as strContenu1
> > >
> > > End Sub
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Exactement...
> > > >
> > > > Mais comment faire pointer une variable VB sur une Zone mémoire déjà alloué...
> > > > Il y a 2 choses à préciser :
> > > > - l'adresse mémoire du début de la données
> > > > - sa longueur (offset)
> > > >
> > > > Et éventuellement son type de données pour l'interprétation du contenu...
> > > >
> > > > Si ma données fais 3 Méga octets, je ne veu xpas qu'elle soit ptésente à 2 endroits différents de la mémoire...
> > > > Mais je veux que cette données soit accessible depuis 2 variables VB...
> > > >
> > > > Les pointeurs en C, C++ et dans tous les langages évolués et fortement typé servent entre autre à cela...
> > > > Avec VB, on ne peux pas accéder de la sorte à la mémoire, aussi facilement qu'en C... Mais je suis sûr qu'avec les API, on doit pouvoir faire des choses performantes...
> > > >
> > > > Donc mon problème revient à faire pointer plusieurs variables VB sur une zone mémoire (identitifié par son adresse de début et sa longueur en octet).
> > > >
> > > > Rien de bien compliqué dans le concept,mais alors pour le mettre en pratique en VB, c'est vraiment la galère.
> > > >
> > > > Tu comprends mieux ce que je veux faire exactement ou ne suis-je toujours pas assez précis dans ma demande ?
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Donc en gros, tu veux uniquement copier le contenu de l'adresse mémoire ?
> > > > >
> > > > > Si c'est cà, il te suffit de copier le contenu du pointeur, non ?
> > > > >
> > > > > DARK SIDIOUS
> > > > >
> > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > CopyMemory permet de copier un contenu mémoire vers un autre emplacement de la mémoire.
> > > > > > C'est l'API qui doit être utilisé pour la définition de l'opérateur d'affectation '=' du langage VB.
> > > > > >
> > > > > > C'est justement ce que je veux pas faire...
> > > > > >
> > > > > > Je veux que mes 2 variables pointes sur le même emplacement mémoire...
> > > > > > Qu'elles se le partagent si tu préfères...
> > > > > >
> > > > > > Je veux donc être capable de faire pointer plusieurs variables VB sur un même emplacement mémoire...
> > > > > >
> > > > > > Or l'API CopyMémory ne permet pas de faire cela...
> > > > > >
> > > > > > Merci quand même pour ton aide...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Oui en effet, il existe l'API CopyMemory qui permet de copier le contenu de la mémoire à une adresse donnée.
> > > > > > >
> > > > > > > Pour plus d'info sur cette API, va voir dans la bibliothèque d'API du site www.ProgOtoP.com
> > > > > > >
> > > > > > > DARK SIDIOUS
> > > > > > >
> > > > > > > [Responsable de la rubrique API du site www.ProgOtoP.net]
> > > > > > >
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Ma question est simple...
> > > > > > > >
> > > > > > > > Soit une variable 'strContenu1' de type String, contenant une très grosse chaine de caractère (un fichier texte de quelques Mo)...
> > > > > > > >
> > > > > > > > J'ai une autre String 'strContenu2' et je voudrais que strContenu2 pointe sur la zone mémoire de strContenu1 pour ne pas recopier ma grosse chaine en mémoire...
> > > > > > > >
> > > > > > > > Parce que l'instruction :
> > > > > > > >
> > > > > > > > strContenu2 = strContenu1
> > > > > > > >
> > > > > > > > recopie la chaine dans un autre emplacement de la mémoire vive (affectation)...
> > > > > > > >
> > > > > > > > J'arrive à récupérer l'adresse mémoire de strContenu1 avec l'instruction suivante :
> > > > > > > >
> > > > > > > > Dim pointeur as Long
> > > > > > > >
> > > > > > > > pointeur = StrPtr(strContenu1)
> > > > > > > >
> > > > > > > > Maintenant, il faut que je fasse "pointer" strContenu2 sur cette zone mémoire...
> > > > > > > > Il doit y avoir une API...
> > > > > > > >
> > > > > > > > Mais laquelle... je cherche désespérement depuis hier...
> > > > > > > >
> > > > > > > > Cela permettrait d'optimiser la performance des programmes VB... optimiser la consommation en mémoire vive...
> > > > > > > >
> > > > > > > > Merci pour votre aide...
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

1 2

Cette discussion est classée dans : vb, mémoire, pointeur, strcontenu1, strcontenu2


Répondre à ce message

Sujets en rapport avec ce message

VB.Net : Récupérer le pointeur d'un tableau de bytes [ par MartialArtist ] Bonjour, je cherche à récupérer le pointeur d'un tableau de byte en VB.Net 2005. Je sais qu'il ne faut pas en théorie utiliser les pointeurs en VB.Ne [ VB.NET 2008 | DirectX ] Fuite de mémoire avec Direct3D ? [ par passylmat ] Bonjour à tous.Après une dizaine d'années à programmer en VB 6.0, j'ai décidé de me mettre à VB.NET. Ainsi, après quelques programmes concluant, j'ai Partage de variables.... [ par cyrilp ] Messieurs, mesdames,J'ai une grande question pour vous...Est-il possible de partager une variable entre plusieurs applications (VB ou pas VB d'ailleur Pour les Pros de la Mémoire : Charger un GROS fichier dans une variable VB [ par jockos ] Impossible de charger un fichier de + de 10 Mo dans une variable VB (type String ou même Variant)... Je veux charger des fichiers de type Mpeg en mémo Delphi VS VB... Réponse à "zac" [ par bioman2 ] En tapant Delphi, pour en savoir plus sur ce langage, je tombe sur le code de "zac" qui assure que son code prouve combien VB est moins rapide que Del pointeur sur string en vb.net [ par sebaznar ] Comment fait-on pour déclarer un pointeur sur un string en vb.net ??????????? Pointeur mémoire [ par OBI76 ] Salut !G un gros problème : pour faire un plugin pour winamp, j'ai été obligé d'utiliser une dll "vblink" reconnue par winamp et qui va dans la ram ch De VB à Excel, blocage de mémoire. [ par tranhamien ] Dans VB, j'ouvre Excel et remplie des valeurs dans Excel, 25 valeurs par ligne, mon programme se bloque à environ 2300 lignes. Sur un autre ordinateur Adresse Mémoire d'une variable VB (pour les pros de l'API) [ par jockos ] Bonjour,J'aimerais pourvoir choisir moi même l'adresse mémoire d'une variable VB. Le VB ne gérant pas les pointeurs, je me doute qu'il faut passer par


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,700 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales