Newsgroup: it.comp.lang.visual-basic
Titolo: [?] API. Reperimento stringhe da pointer

Quali sono le API che si occupano del reperimento di stringhe e strutture da
un pointer
Sul CD della Bibbia "Appleman" viene fornita una DLL (APIgid32.dll) con
queste funzioni
Lo svantaggio che il file da distribuire è circa 110K (troppo grande)
Una delle funzioni che uso è agGetStringFromPointer
Mi basta anche una traccia.
Ciao e grazie
--
Marco Camplese VB5 SP3 W98
WEB: 
http://space.tin.it/computer/macample
per la posta privata eliminate NONROMPERE

Vado a memoria...
Declare Sub CopyMemory alias "RtlMoveMemory" (lpDest as any,lpSrc as
any,ByVal cbLen as long)
Copi cbLen bytes da lpSrc (puntatore) a lpDest (puntatore)
Ovviamente puoi utilizzare StrPtr() per ottenere il puntatore alla tua
stringa.
Ciao
Corrado

...

1. Purtroppo la stringa da prelevare è di lunghezza variabile, come faccio ?
2. Le API di cui hai parlato (win32API.txt alla mano) non le trovo, Dove ?
Grazie
Marco Camplese


L'Api non é documentata nel file Win32.txt come non sono elencate molte
altre.(Hai giá la versione aggiornata?).
Se il puntatore 'punta' ad una stringa a lunghezza variabile penso che
quasta sará null terminated (se usi agGetStringFromPointer$
senz'altro).quindi potresti leggere un byte all volta fino a quando il null
di terminazione,altrimenti dovresti trovare il modo di sapere in anticipo la
lunghezza della stringa in modo da impostare
sia il buffer di ricezione che il numero di bytes da leggere.
Attenzione al 'giochino' Ansi/Unicode.
Ciao
Corrado

...

Saro' Breve,
1. Ho provato ad allungare la lunghezza della stringa di un carattere alla
volta e controllare l'ultimo carattere = 0 (do until carat = 0), nulla anzi
blocco totale
2. Ho provato a spostare l'indirizzo originale un byte alla volta =
FALLIMENTO
il tutto e racchiuso in una function che passa l'indirizzo e ritorna la
stringa (almeno quella è l'idea) :-<
Aiuto! Come posso fare ?
Ciao


 stringa (almeno quella è l'idea) :-<
Fai cosi':
Declare Function lstrcpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1
As String, ByVal lpString2 As long, ByVal iMaxLength As Long) As Long
function GetStringa( Puntatore as long )
	dim Stringa as string
	Stringa = space$(32767)
	call lstrcpyn( Stringa , Puntatore, 32766 )
	GetStringa = left$( Stringa , instr(GetStringa,chr$(0))-1 )
end function
L'ho scritta al volo ma dovrebbe funzionare.
Ovviamente la stringa non deve essere piu' grande di 32 Kb.
Buon Lavoro
-- 
Ciao
By -MES-   Maronese Ettore
http:\\
ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://members.xoom.com/it_lang_vb

Ok è andata, FUNZIONA TUTTO !
Messaggio per Ettore: mi è bastato un copia/incolla. Complimenti! :-)
P.S.: Credo di aver speso 120.000 a ca**o, nella Bibbia "Appleman" queste
funzioni non vengono trattate (volutamente), per dare spazio a una DLL
dell'autore che secondo lui dovrebbe facilitare operazioni di questo tipo
(penso a scopo publicitario). Ho provato anche a scaricare Win32SDK(13Mb!!)
ma purtroppo per me il C è quasi cinese.
L'ultima cosa che mi manca (per i motivi che ho descritto sopra) è LA
FUNZIONE per reperire l'indirizzo di una variabile (buffer di una struttura).
Ringrazio sinceramente tutti per la collaborazione.
Appena risolvo il tutto, posto il codice al sito comune, il risultato è molto
interessante(spero).



Hai provato con le funzioni NON DOCUMENTATE di VB5 che ritornano il
puntatore ad una variabile?
VarPtr serve per variabili numeriche
StrPtr per variabili stringa
ObjPtr per variabili oggetto
--
Roal Zanazzi
z...@iol.it