Newsgroup: it.comp.lang.visual-basic
Titolo: Puntatori a tutto (tranne che ale BStr, ovviamente)

ciao a tutti,
quale API squisitamente (o disgustosamente, secondo i gusti) windowsiana
potrei usare per ottenere un puntatore (valore di ritorno passato come Long
al rientro della chiamata) a qualsiasi cosa che non sia una stringa o una
reference ?
Nella disperazione avevo pensato di chiamare
lstrcpynA (versione ansi della routine di copia stringhe non
zero-terminated) in questo modo
declare function lstrcpynA lib "kernel32" (ByVal Dest As Any, ByVal Sorg As
Any, ByVal NumBytes As Long) As Long
AddressOfVar = lstrcpynA (Var, Var, 0&)
nel senso di copia zero byte da Sorg a Dest (sempre Var !) e ritornami il
puntatore a Var.
Premesso che ancora non ho testato (E che non funzionerebbe con le stringhe
Bstr), qualche anima pia ha un idea un po' meno evanescente e macchinosa di
come si potrebbe ottenere un indirizzo di memoria ?
Avevo sentito che qualche versione di VBA avesse VarPtr e StrPtr, ma non ne
ho vista traccia né in VB5 né in VB6 ..... morire che dessero seguito ad una
caratteristica utile !
Grazie in anticipo
Ciao
Soviet-Mario

caratteristica utile !
Ci sono ancora, e c'e' anche ObjPtr().
-- 
ciao, hal

 Soviet-Mario
Sono funzioni nascoste....non troverai nulla sugli help ufficiali.
Se cerchi in rete trovi tutto.
Flippo

 Se cerchi in rete trovi tutto.
E in groups.google su questo NG se ne è parlato ampiamente in passato.
Ma non ho capito a cosa ti servano: non basta dichiararti la declare con 
ByVal As String come parametri?
Ciao

 ciao, hal

 wrote in message
c00a8p$r0v$1...@grillo.cs.interbusiness.it...

vada per gli help, ma come mai non riesco a richiamarle nel codice
interpretato ? (compilando non ho manco provato)
pur ripetendomi, richiedo : occorrono declare come se non fossero funzioni
"intrinseche" ? Oppure fanno capo a qualche oggetto e per accedere ci vuole
il PUNTO (member selection) ?
ciao
Soviet-Ma
rio


 devono vivere per qualche tempo dentro il codice basic sotto forma di long
Non mi sono mai piaciuti gli Any: non sai mai come trattarli.
Meglio tipizzare le funzioni anche tramite gli Alias delle Declare, in modo
da trattare il tipo di dato corretto.
Stringhe? ByVal As String
Blocchi di memoria? (che poi è la stessa cosa) ByRef As Byte 'non mi ricordo
mai se ByVal o ByRef
Indirizzi? ByVal As long
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

Perché mi dice identificatore sconosciuto ?
Sospetto che il problema sia da un'altra parte.
Un codice come il seguente compila e si esegue benissimo:
Option Explicit
Public Sub Main()
    Dim v As String
    Dim pStr As Long
 
    v = "ciao"
    pStr = StrPtr(v)
 
    MsgBox CStr(pStr), vbOKOnly
End Sub
-- 
ciao,
hal

 da trattare il tipo di dato corretto.
no aspetta, io ho bisogno di accentrare il codice in un'unica funzione (in
basic) che gestisca il "dump" di variabili di qualunque tipo in modo
standardizzato.
Di conseguenza essa deve ricevere puntatori. Il modo più ovvio di
nasconderli nel codice basic è di metterli in un Long (siccome any non viene
accettato nel codice sorgente basic).
Quindi mi serve una API che ritorni un puntatore a qualsiasi cosa eccetto
che stringa (parametro Any) dentro il valore di ritorno Long.
questa Api sarebbe chiamata  on-the-fly nella chiamata a "MemoryDump"
public sub MemoryDump (byval Address as long, Byval Size as long, ByVal
CmdString as String)
dim buffInt, buffByte, BuffLong, Buffvattelapesca, buffBlock() As Byte
for each istruzione in CmdString
    select case Size
    case 1
    case 2
    case 4
        rtlMoveMemory (BuffLong, Address, Size)
        formatta ed output di BuffLong
    case 8
    case else
    end select
next istruzione
la chiamata sarebbe
public type typeInutil
    B as byte
    L as long
    D as Double
end type
dim TT as typeInutil
call  MemoryDump(ApiVarPtr(TT), lenB(TT), "BVVVLD")
VVV sono per skippare i byte vuoti nella struttura che viene allineata ad
indirizzi opportuni
ciao
Soviet-MArio


 accettato nel codice sorgente basic).
Ok, allora l'rtlMoveMemory dovrebbe avere tutti e tre i parametri ByVal As
Long: è inutile che siano As Any se poi gli passi solo puntatore.
Per il resto ti è stato risposto molto più in su.
