|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 70
|
[VB6] utilizzo dll - parametro void*
Ciao a tutti,
nel mio progetto in VB6 devo usare una libreria per la quale ho l'header per C++. In una funzione ho come parametro void* Param, come converto questa cosa in VB6?? Vi posto la funzione dall'header C++... Codice:
extern int __stdcall s_RgCallbk(long p, void *pUserData); |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Questo articolo potrebbe aiutarti.
Posto anche questo estratto: Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 13-07-2009 alle 13:06. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Sicuramente long p in VB6 sarà un "ByVal p As Long". Da quel che so long in C++ è un signed int a 32 bit, esattamente come in VB6... |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
probabilmente un cookie che qualche API passa alla funzione di callback di cui andreapav ha specificato il prototipo; é una tecnica che si usa sempre quando si un pattern a callback.
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
A me basta solo sapere (long p, void *pUserData). void *pUserData che è ? Gli passo un parametro che si chiama *pUserData ( e poi quello star iniziale che crea ancor + confusione... ) ed è di "tipo void" ??? Vediamo cosa dice andreapav... Comunque con tutti i C++ che ci sono qui, non è che ci sia la fila per rispondere... |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
ma dove sono gli amanti del C++ quando servono? cmq a me quel "void*" puzza di puntatore a funzione.
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Un void* è un puntatore di tipo void, cioè un particolare tipo di puntatore che può puntare a qualsiasi tipo di dato.
Il carattere di 'star' fa parte della dichiarazione di tipo, serve per dire che il tipo dichiarato "non è un tipo valore" ma un "tipo puntatore". Della serie: dire int significa dichiarare un intero e dire invece int* significa dichiarare un puntatore a tipo intero. Quindi void* è un puntatore a tipo void, cioè a qualsiasi tipo. Molto utile per passare un tipo user defined, senza conoscerne l'esatto tipo in precedenza (scusa il gioco di parole). Probabilmente, se nel suo contesto serve solo per passare una struttura/classe user defined magari per tradurre il tutto in VB6 lui potrebbe: 1) tradurre lato VB6 la sua struttura/classe che vuole passare alla funzione; 2) tradurre il parametro formale di tipo void* con un ByRef del tipo che si è definito al punto 1. Disclaimer: non so se ho detto vaccate, questo è solo un ragionamento, in attesa di chiarificazioni da chi ha avuto esperienza in merito.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
ah ok... quindi può intendersi come usare "object" come tipo di un parametro in java o .net?
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
a) non è un tipo primitivo (mentre void* sì); b) porta con se informazioni sul tipo, mentre void vuol dire proprio non avere nessuno straccio di informazione sul tipo, e un puntatore a void può letteralmente puntare a qualsiasi tipo di dato. "Dall'altra parte", per così dire, sei tu programmatore che sai che tipo di dato ti arriva e puoi fare i tuoi bei cast. Void pointer ti consente "solo" di passare potenzialmente qualsiasi dato. Questo per quel poco che ne so (i miei ricordi del C/C++ sono quasi del tutto sfumati ormai).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Non sarebbe (long p, void *pUserData), ma (long p, void* pUserData). Stando a quanto dici le due possibili traduzioni in VB6 potrebbero essere : (ByVal p As Long, ByRef pUserData As Variant) oppure (ByVal p As Long, ByRef pUserData As Object) Non saprei tradurlo in altro modo... |
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Jul 2009
Messaggi: 6
|
Io proverei prima a tradurre il tutto in un array cubico e poi lo "spalmerei" nell'intero codice tramite il metodo TransLate, che ha anche il vantaggio di produrre un file di log ottimizzato..
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
ragazzi, veramente non sapete cosa vuol dire in C/C++ "void*"?
pare che solo banryu lo sappia. pUserData a me sembra chiaramente un cookie, non un puntatore a funzione; il meccanismo é il seguente: lo "user code" chiama una qualche funzione API di un qualche framework, la funzione API chiamata vuole come parametro un puntatore a una funzione di callback che dovrá essere chiamata una o piu volte dalla funzione API stessa; il programmatore, scrivendo il codice della funzione di callback, trova utile avere delle "user information" che gli permettano dal codice di callback di capire in quale contesto é stata chiamata la funzione API, e queste "user information" sono puntate dal parametro pUserData che la funzione API riceve e passa cosi com'é direttamente alla funzione di callback tutte le volte (ignorandone completamente il significato). un esempio: la funzione API Win32 EnumWindows, la cui funzione di callback é documentata sotto il nome di EnumWindowsProc. il cookie in questo caso é il parametro LPARAM di EnumWindows. Quote:
![]() bannategli l'IP, porca miseria!
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Comunque secondo me dovresti fare
Codice:
ByRef pUserData As Any |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Quote:
Cmq vedo che c'è abbastanza confusione, chi dice questo, chi dice quello... Ma soprattutto : dove sarà finito andreapav ? |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:58.





















