Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-07-2009, 10:57   #1
andreapav
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);
Grazie mille, ciao!
andreapav è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2009, 12:38   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Questo articolo potrebbe aiutarti.

Posto anche questo estratto:
Quote:
Le conversioni comuni a tipi di dati di Visual Basic sono elencate di seguito:

* parametri numerici 8 a 16 bit: passaggio di parametri numerici 8 a 16 bit (int, short, unsigned int, BOOL, breve senza segno e WORD) come valore integer.
* parametri numerici a 32 bit: passare a 32 bit parametri numerici (unsigned long, long e DWORD) come LONG.
* Oggetto handle: tutti I punti di manipolazione sono valori integer a 32 bit univoco associati a una finestra e vengono passati per valore, quindi passare questi parametri come valore Long.
* Stringhe: stringhe di includere i LPSTR e LPBYTE dati tipi (puntatore ai caratteri) o un puntatore ai caratteri senza segno. Poiché Visual Basic passa un puntatore all'inizio della stringa, passare questi parametri come (ByVal param As String).
* I puntatori a valori numerici: passaggio di puntatori a valori numerici non con la parola chiave per la ByVal.
* Strutture: se il tipo di definita dall'utente di Visual Basic corrisponde la struttura previsto dalla DLL, la struttura può essere passata per riferimento. Nota: strutture non possono essere passati per valore.
* I puntatori a matrici: passare il primo elemento della matrice per riferimento.
* Null puntatori: se una DLL è previsto un puntatore null, passarlo come (ByVal paramname As Any) o paramname ByVal come valore Long. È possibile utilizzare 0 e il valore di paramname quando si chiama la DLL.
__________________

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.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 13-07-2009, 14:48   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da andreapav Guarda i messaggi
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);
Grazie mille, ciao!
Se hai già del codice C++ funzionante, e presumo tu conosca il C++ ( io non ne sono un gran conoscitore ), potresti spiegare che significa "void *pUserData" in quel contesto.
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...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 01:12   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Se hai già del codice C++ funzionante, e presumo tu conosca il C++ ( io non ne sono un gran conoscitore ), potresti spiegare che significa "void *pUserData" in quel contesto.
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.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 16:20   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da fero86 Guarda i messaggi
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.
Booh, ne so quanto prima.
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...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 17:05   #6
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
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.
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 17:13   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 18:55   #8
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
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?
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 19:37   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
ah ok... quindi può intendersi come usare "object" come tipo di un parametro in java o .net?
Non proprio, dato che comunque la classe Object di Java:
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 20:42   #10
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
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).
Ah, perciò era pure scritto sbagliato.
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...
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 20:56   #11
00pipp01
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..
00pipp01 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 21:05   #12
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Quote:
Originariamente inviato da MarcoGG Guarda i messaggi
Ah, perciò era pure scritto sbagliato.
Non sarebbe (long p, void *pUserData), ma (long p, void* pUserData).
No, non è sbagliato, sono equivalenti.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 21:12   #13
fero86
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:
Originariamente inviato da 00pipp01 Guarda i messaggi
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..
Gesu, basta, questo fake ha rotto le palle!!
bannategli l'IP, porca miseria!
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 21:25   #14
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4907
Comunque secondo me dovresti fare
Codice:
ByRef pUserData As Any
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2009, 21:47   #15
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da ||ElChE||88 Guarda i messaggi
Comunque secondo me dovresti fare
Codice:
ByRef pUserData As Any
Vero. Potrebbe andare...

Quote:
Originariamente inviato da fero86 Guarda i messaggi
ragazzi, veramente non sapete cosa vuol dire in C/C++ "void*"?
Mettiamola così : il mondo è pieno di cose che vorrei sapere e il void* del C++... Non è mai stato tra quelle.
Cmq vedo che c'è abbastanza confusione, chi dice questo, chi dice quello...

Ma soprattutto : dove sarà finito andreapav ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Ubisoft potrebbe licenziare ancora ma se...
Samsung Galaxy S26: un leak anticipa col...
Aetherflux e Lockheed Martin insieme per...
SpaceX sta proseguendo i test della terz...
Axiom Space ha mostrato un nuovo video d...
Realme: la trasformazione in sub-brand d...
PlayStation 6 si farà attendere: ...
BWT Alpine chiude la prima tornata di pr...
Beyond Good & Evil 2 non è st...
Qualcomm: il CEO ha guadagnato quasi 30 ...
AMD: 'Non importa cosa dice Intel, i mig...
Non è solo colpa del mercato: il ...
3 smartphone ai prezzi più bassi ...
Pwn2Own Automotive 2026 da record: 76 ze...
Più watt, più bassi e subwoofer incluso:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v