Newsgroup: it.comp.lang.visual-basic
Titolo: DLL e Funzioni Hooks

Salve a tutti
Stavo facendo un programma con gli hooks, nel monitorare tutti i messaggi
relativi a ogni processo in win32.hlp si dice di dover creare una dll con la
funzione callback dentro
Io quindi faccio una dll activeX e ci metto la funzione, che poi mettendo i
riferimenti verra' vista come un oggetto ma il punto e' con la funzione
GetProcAddress non riesco a leggere la funzione oggetto della dll, e infatti
se vado a vedere la sua export table non c'e'...
Come devo fare??? La dll activex non va bene? vb non permette di creare dll
"vere"?
Grazie in anticipo

 vb non permette di creare dll "vere"?
no  :(
Faber

 ha scritto nel messaggio
news:9hhq7e$e4aip$1...@ID-66268.news.dfncis.de...


Però una soluzione sporca l'ho trovata! ;)
Potresti usare la DLL fatta in C da qualcun altro :)
Tipo vai su 
http://www.vbaccelerator.com
 e scarica ssubtmr.dll
                Ciao
                        Allanon

 ora ne sono proprio sicuro :PPPP
esiste  un kit denominato Compile Controller 5 che permette di
modificare il processo di linking di una dll activex ed esportare le
funzioni che servono in modo da creare una dll normale-activex
doppia :)
l'ho inviato mesi fa sul sito comune 
http://www.it-lang-vb.net
ciao
--
Fibia "Sakamoto" FBI
E-mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Sito Personale: 
http://www.geocities.com/fibiafbi
VB Simple: 
http://vbsimple.virtualave.net
Membro #25 delle Mitiche Brigate Takahashi sezione Sud

bella allanon, ma sei l'amico de andrezio? so il fratello
grazie per le risposte, cmq non vedo la necessita' di un tool separato per
fare una semplice dll .. bah

no  :(
le crea, le crea... solo che:
 - devi intercettare le chiamate al compilatore e al linker per cambiare
gli argomenti della riga di comando
 - devi scriverti a mano il file .def
 - devi sapere come VB decora i nomi di funzione
 - devi sapere gli argomenti supportati dal compilatore e dal linker, e
se il linker č ben documentato il compilatore non lo č affatto
-- 
Posted from 
mx1.aruba.it
 [62.149.128.130] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 se il linker č ben documentato il compilatore non lo č affatto
vabbe tanto ho fatto il porting su delphi,usero' sempre quello ormai, grazie

 fare una semplice dll .. bah
sottovaluti il problema dell'esposizione delle funzioni
una dll normale deve avere un suo punto d'ingresso per poter essere
richiamata tramite API
le dll create con vb sono ActiveX e non espongono le loro funzioni
e non possono essere richiamate tramite API ma soltanto tramite COM.



:-(
Sarai la gioia di Roal!   :-)
ciao
ugo

 e non possono essere richiamate tramite API ma soltanto tramite COM.
Si si lo so, ma perche' non c'e' in vb un opzione anche per le dll standard?
chissa' quanto costa poi quel tool che dici tu...
W delphi :)

 W delphi :)
:)
Faber

decora?
alcuni linguaggi permettono una cosa chiamata overloading delle
funzioni, praticamente due funzioni con lo stesso nome ma parametri
diversi sono considerate funzioni diverse, e il compilatore sceglie di
volta in volta quale usare in base ai parametri
Dato che le informazioni sui parametri durante la compilazione si
perdono, il compilatore esegue un'operazione detta di decorazione dei
nomi delle funzioni, cioè in base ai parametri della funzione, al nome,
al tipo del valore di ritorno, viene generato un nome, detto nome
decorato, che identificherà la funzione da quel momento in poi
Ad esempio, se due funzioni, entrambe chiamate myfunc, hanno la prima
due parametri di tipo Long, e la seconda un parametro di tipo Boolean,
il compilatore eviterà l'ambiguità trasformando il nome della prima
funzione in myfunc_Long_Long (bugia - in realtà i nomi decorati hanno un
aspetto completamente diverso) e il nome della seconda in myfunc_Boolean
(ok, Roal, ora puoi iniziare la tua lezione di tetrapiloctomia :)
Visual Basic NON ha l'overloading di funzioni. L'unica possibile ragione
per il fatto che usi i nomi decorati è che internamente, prima della
compilazione vera e propria, è tradotto in C++, o più probabilmente in
pseudo-codice intermedio. Per nostra fortuna i nomi di funzione vengono
decorati tutti allo stesso modo...


>Ben fatto, hai scelto lo strumento giusto.
sai, non sono più *così* convinto... ma non è questo il posto per
parlarne. Comunque posso dire che in qualcosa Delphi mi ha deluso
particolarmente. Ricordi che mi dicesti che le unit mai utilizzate non
venivano aggiunte all'eseguibile finale? ok, prova a fare due dll vuote,
senza codice. Una che non usi alcuna unit, l'altra che usi la Classes.
Dimmi la differenza nelle dimensioni dei file compilati...


 č freeware
piů che freeware č sconosciuto.
ho sfogliato la licenza per 5 minuti ma non sono riuscito a capire se fosse
free o meno. in ogni caso non c'č scritto di pagare :)
consiglio a tutti gli amanti della decompilazione il sito dell'autore
http://johnc.ne.mediaone.net/
con guide sul funzionamento della VM ed altre chicche del genere.


 aspetto completamente diverso) e il nome della seconda in myfunc_Boolean
e sicuramente piu' brutto :D
?FastBStringReverse@modFastString_stub@@AAGXXZ
onore a Hyperion che per primo ha passato il CC5.


 no! non c'è!
il mio "mah..." era riferito alla domanda "perché non c'è in VB ..."
:)
Faber

onore a Hyperion che per primo ha passato il CC5.
grazie per gli onori, ma diamo a Cesare quel che è di Cesare... a
parlare per primo del CC5 fu un certo Sabba, a cui chiesi di spedirmelo
per posta


 programma che ho fatto per decodificare i nomi decorati...
non ce l'ho :(
ma uso anche win9x
se non disturbo manda pure.. accetto di tutto :)
se supera 1 MB manda su 
fibi...@yahoo.com


>se supera 1 MB manda su 
fibi...@yahoo.com
1 MB? non è mica fatto in VB, neh :)
il programma in sè è 16 kb (nonostante le porcherie inserite da
Delphi...), poi c'è dbghelp.dll, 159 kb e sembra non dipendere da alcuna
dll esterna. Io mando tutto, anche se la dll non si potrebbe...


dll esterna. Io mando tutto, anche se la dll non si potrebbe...
a me va bene senza dbghelp ;-)
(ma nello zip ci metti anche il src ? :-P)
grazie, hal

 compilato con i package a linking dinamico, quindi servono i .BPL usati.
infatti è a riga di comando.. non fa analisi della dll ma interpreta la
stringa
decorata restituendone il prototipo c


compilato con i package a linking dinamico, quindi servono i .BPL
usati.
non usa nemmeno la sysutils, se vuoi saperlo :P
<delphi>
alloco un buffer con GlobalAlloc, leggo la riga di comando con
GetCommandLine, elimino il primo parametro con una funzione che è tutto
un programma (chi ha bisogno dei typecast quando esistono le variabili
ad indirizzo assoluto? ;), passo la riga di comando rimanente
all'apposita funzione di dbghelp.dll, scrivo in output il risultato,
GlobalFree per sbarazzarmi del buffer, programma finito. Tre variabili
globali, di cui nemmeno una di tipo PChar (chi si fida? va a sapere come
le gestisce internamente...). Ancora non ci siamo, comunque... il codice
di inizializzazione della unit System dev'essere pieno di cose di cui
farei volentieri a meno (tra cui il supporto - obbligatorio - per i
Variant di OLE)
</delphi>


(ma nello zip ci metti anche il src ? :-P)
è un programma del cavolo, di mio non c'è quasi nulla (a parte la
routine che esamina i parametri della riga di comando, di cui vado
abbastanza fiero :), il sorgente lo do a chiunque interessi, ma non lo
raccomanderei come esempio di "buona programmazione" in Delphi :P
certo la curiosità su come funziona la decorazione dei nomi m'è venuta,
magari più avanti mi documenterò e farò a meno della dbghelp


che si avrebbe in VB <g>).
senza dubbio :) e VB non sa nemmeno fare i programmi tutto-in-uno...


peggio >:-]
ooops, è vero :) e anche il percorso di installazione di VB, se non
ricordo male... e la lingua del tuo sistema operativo... non è che da
qualche parte scrive anche il product id? >:->
