begin process at 2008 08 30 12:25:53
1 234 003 membres
37 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Adresse Mémoire d'une variable VB (pour les pros de l'API) [ Archives Visual Basic / API ] (jockos)

Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 10:46:12

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 une API.
Mais laquelle ?

Je sais récupérer l'adresse d'une variable VB avec "l'API" native (situé dans le runtime VB) StrPtr(str as String) as Long

Mais je voudrais pouvoir choisir moi même l'adresse d'une variable (en gros faire une allocation mémoire).

Ceci dans le but de partager une zone mémoire par plusieurs variables VB. (pointeurs)


Merci pour votre aide...

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 10:52:24

jockos
En fait, j'avais déjà posé cette question...
Mais sans réponse satisfaisante... :(

http://www.vbfrance.com/forum.v2.aspx?ID=60624#60624


Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 11:12:05

crenaud76
Tu as l'API GlobalAlloc() qui alloue une quantité de mémoire sur le Tas .. Avec GlobalFree() pour libérer bien sur, sinon, tu cours au crash de Windows

Christophe R.

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 11:23:54

jockos
Il vaut mieux utiliser HeapAlloc ou VirtualAlloc en fonction des quantités de mémoires à allouer.
GlobalAlloc est obsolete.

Merci quand même, mais ça ne répond pas du tout à ma question...

Ma question est très simple (et prend 2 lignes de code en C/C++ ou autre langage utilisant les pointeurs) mais très dur à réaliser en VB :
Comment déclarer 2 variables (ou plus) de type String (par exemple) utilisant le même emplacement mémoire ?

On peut tourner la question différemment, mais ça revient au même...
Comment faire pointer 2 variables String sur la même zone mémoire.

Dim hHeap As Long
Dim pointer as Long 'Pointeur sur la zone mémoire
Dim lenString as long 'Taille de ma String

lenString = 500 'octets

hHeap = GetProcessHeap()
pointer = HeapAlloc(hHeap, 0, lenString)

'Comment déclarer 2 string (str1 et str2) qui vont pointer sur le buffer de 500 octets à l'adresse mémoire pointer ?

HeapFree GetProcessHeap(), 0, ptr



Bref, je pense que tu as compris le problème...

ça permettrait d'optimiser la rapidité d'un programme VB de manière considérable car le programme occuperait beaucoup moins de mémoire en RAM et n'aurait pas à allouer de la mémoire à chaque fois.

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 11:24:07

jockos
Il vaut mieux utiliser HeapAlloc ou VirtualAlloc en fonction des quantités de mémoires à allouer.
GlobalAlloc est obsolete.

Merci quand même, mais ça ne répond pas du tout à ma question...

Ma question est très simple (et prend 2 lignes de code en C/C++ ou autre langage utilisant les pointeurs) mais très dur à réaliser en VB :
Comment déclarer 2 variables (ou plus) de type String (par exemple) utilisant le même emplacement mémoire ?

On peut tourner la question différemment, mais ça revient au même...
Comment faire pointer 2 variables String sur la même zone mémoire.

Dim hHeap As Long
Dim pointer as Long 'Pointeur sur la zone mémoire
Dim lenString as long 'Taille de ma String

lenString = 500 'octets

hHeap = GetProcessHeap()
pointer = HeapAlloc(hHeap, 0, lenString)

'Comment déclarer 2 string (str1 et str2) qui vont pointer sur le buffer de 500 octets à l'adresse mémoire pointer ?

HeapFree GetProcessHeap(), 0, pointer



Bref, je pense que tu as compris le problème...

ça permettrait d'optimiser la rapidité d'un programme VB de manière considérable car le programme occuperait beaucoup moins de mémoire en RAM et n'aurait pas à allouer de la mémoire à chaque fois.

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 19/02/2004 11:28:11

crenaud76
Sauf que pour cela, tu vas faire une tripoter d'appels API, qui sont super pénalisant !!!!!!!!!
Faut bien doser, car la, je suis aps certain que tu y gagnes bcp !!

Christophe R.

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 24/02/2004 09:36:51

ShareVB
salut

déjà si tu veux de l'optimisation VB super optimisée (lol) je te conseille le livre de M.Curland "Advanced Visual Basic 6"...
(il explique comment booster VB et faire des économies de mémoire, appel de pointeur de fonctions...)

ensuite dans ton cas prend l'api :
SysallocString 'si c'est un pointeur UNICODE
SysAllocStringByteLen 'si c'est un pointeur Ascii

pour eviter les bug quand tu en as plus besoin :
varstr = vbnullstring

voila

ShareVB

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 24/02/2004 10:05:10

jockos
Salut,

J'ai déjà utilisé ces fontions (avec SysFreeString pour libérer la mémoire) en C++ dans des controles ActiveX (sur des BSTR, qui sont des chaines de caractères Unicode correspondant aux String de VB).

Cependant, je ne trouve pas leur profil, ni dans quel fichier elles se trouvent ...

Es-tu sûr que ce sont des API que l'on peut utiliser sous VB et si oui, dans quel fichier (dll) se trouvent-elle ?

Merci pour ton aide...

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 24/02/2004 10:11:31

ShareVB
salut

sure que oui :
elles sont dans oleaut32.dll

par contre je suis pas sur que l'utilisation de SysFreeString sur une zone mémoire non allouée par une API SysXXX ne fasse pas planter VB...

voila

ShareVB

Re : Adresse Mémoire d'une variable VB (pour les pros de l'API) le 24/02/2004 10:22:36

jockos
Je suis d'accord avec toi, quand je disais SysFreeString, c'était pour libérer une zone mémoire allouée par SysAllocString ou SysAllocStringLen.

Merci pour ton aide, je vais exploiter la piste que tu m'as donné et essayé de voir ce que cela donne...

Cependant, je ne suis pas sûr que cela va m'avancer beaucoup dans mon problème, car je ne vois pas commet faire pointer 2 variable String sur la même zone mémoire, peut importer si cette zone est alloué avec SysAllocString ou autre chose...
:(

Dim str1 as String
Dim str2 as String

'Allocation d'une String
str1 = SysAllocString("test d'allocation")

'Comment faire pointer str2 sur la éone mémoire de str1 ?
'??????????

'Libération de la String
SysFreeString(str1)



[Page 1 Page 2]
Classé sous : vb, variable, adresse, api, mémoire

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS