Newsgroup: it.comp.programmare.win32
Titolo: Oggetto _variant_t

Vorrei solo sapere come si fa a estrarre una _bstr_t da una _variant_t senze
farsi dare un Access violation
Ecco il codice:
_bstr_t Pippo;
_variant_t Pluto;
// il valore nella _variant_t lo ricevo da un campo di un database tramite
una classe ADO
Pippo = Pluto.operator _bstr_t();
    ^
    qui mi da un'access violation. Qualcuno sa dirmi cosa sbaglio?
P.s: se per caso sono OT anche in questo Gruppo, abbiate almeno la cortesia
di dirmi in quale Gruppo devo postare, non come ha fatto un certo tizio,
molto ironicamente, chiamato "LUC"  !!!
Grazie in anticipo
Pivanti Marco

 molto ironicamente, chiamato "LUC"  !!!
Non ringraziarmi troppo, eh... 8-PPPPPPPPPPPP
-- 
Luc.

Ok allora ti ringrazio poco!!!!
:-))
"Luc" <XXX...@katamail.comXXX> wrote in message
news:MPG.161bf1d31...@news.enter.it...


 :-))
Quota bene però!
-- 
Luc.

Ti ringrazio, anche se non troppo!!!
Ma il mio problema sussiste, perchè il metodo Detach mi ritorna un tipo
VARIANT , ma poi non so come procedere per ottenere una _bstr_c.
Comunque a me servirebbe un tipo *char da passare a una funzione .
Da una _bstr_t posso usare una W2A che mi estrae una *char, ma da una
_variant_t proprio non so come fare!!!
Grazie in anticipo!
Pivanti Marco

 VARIANT , ma poi non so come procedere per ottenere una _bstr_c.
Prova a vedere come è definito VARIANT e vedrai che è semplicissimo... 8)
-- 
Luc.

Probabilmente sono tonto, ma non trovo la definizione di un tipo VARIANT
mentre ho trovato la definizione del tipo _variant_t. Ho guardato, ma non ci
capisco niente.
Premetto che sono un programmatore in VB e stň cercando di passare al C++
per velocizzare alcune funzioni.
Per me dovrebbe essere tutto del tipo :
ho una variabile a di tipo indefinito,
la converto a stringa con una funzione e la passo ad un'altra funzione.
Possibile che in c++ queste operazioni siano piů complesse che scrivere
un'intera applicazione in VB?
Comunque, tralasciando il momento di profonda tristezza, non č che qualcuno
mi potrebbe dare due dritte su come fare a far interagire un _variant_t con
un char* ?
Grazie molte!
Pivanti Marco

 capisco niente.
Questo è VARIANT:
typedef struct tagVARIANT {
 VARTYPE vt;
 unsigned short wReserved1;
 unsigned short wReserved2;
 unsigned short wReserved3;
 union {
 unsigned char bVal; 
 short iVal; 
 long lVal; 
 float fltVal;.
 double dblVal;
 VARIANT_BOOL boolVal;
 SCODE scode;
 CY cyVal; 
 DATE date;
 BSTR bstrVal; 
 IUnknown FAR* punkVal; 
 IDispatch FAR* pdispVal; 
 SAFEARRAY FAR* parray; 
 unsigned char FAR* pbVal;
 short FAR* piVal; 
 long FAR* plVal; 
 float FAR* pfltVal; 
 double FAR* pdblVal; 
 VARIANT_BOOL FAR* pboolVal; 
 SCODE FAR* pscode;
 CY FAR* pcyVal; 
 DATE FAR* pdate; 
 BSTR FAR* pbstrVal; 
 IUnknown FAR* FAR* ppunkVal; 
 IDispatch FAR* FAR* ppdispVal;
 SAFEARRAY FAR* FAR* pparray;
 VARIANT FAR* pvarVal; 
 void FAR* byref;
 };
};
A te serve bstrVal (o pbstrVal)
Prova a vedere con il debugger...
-- 
Luc.

A me veramente servirebbe un tipo char* ed ho già provato ad usare gli
estrattori, ma l'estrattore che mi ha dato il risultato più vicino a quello
che voglio é pbstrVal che mi restituisce un puntatore ad un solo carattere
che almeno è il primo carattere della mia stringa!

Devi convertire la stringa con quella funzione dal puntatore pbstrVal ad un
puntatore char.

Grazie Davide!
Finalmente sono riuscito ad ottenere una Char* ora il problema č: se nel
Database non ho una stringa, ho un valore a NULL quindi devo controllare
direttamente nella _variant_t il tipo ritornato.
Immagino ci sia una funzione o un operatore che mi permetta di fare questo
controllo, ma come al solito non ho trovato niente e l'unico operatore (==)
mi permette solo di confrontare due oggetti Variant . Sapresti darmi un
esempio di come si fa un controllo di tipo su un _variant_t
Grazie infinite
Pivanti Marco

 Grazie Davide!
Ingrato! 8-P
-- 
Luc.

Scusa Luc, non volevo offenderti, ma Davide in un messaggio mi ha dato la
soluzione mentre tu in 4 mi hai dato solo enigmatici indizi, siccome sono
indietro per questi problemi banali, ma per me insormontabili data la mia
scarsa conoscenza di queste tecnologie, ho apprezzato molto la schiettezza
dell'aiuto senza pormi altri quesiti.
Il ringraziamento va anche a te, per il disturbo preso nei miei confronti!
Se leggi il mio mess precedente, avrei un'altro problemino... se hai qualche
minuto!!
Ringrazio tutti anticipatamente!
Pivanti Marco

 soluzione mentre tu in 4 mi hai dato solo enigmatici indizi
Vuoi imparare o copiare? Io proprio settmana scorsa ho finito una parte di 
applicazione che usava i VARIANT... e mi sono studiato tutto ciň che mi 
serviva su MSDN...
-- 
Luc.

Bravo, ma io non ho tempo di mettermi a studiare tutto quel che mi
serve!!!!!!
Ho chiesto un aiuto a chi il problema lo ha già risolto, non pretendo che
qualcuno mi scriva l'applicazione intera.
Grazie comunque!!

Tra l'altro ho risolto, e sarebbe bastato rispondere "vt"!
Grazie a tutti!!!
Pivanti Marco

 Tra l'altro ho risolto, e sarebbe bastato rispondere "vt"!
Bravo, hai un futuro davanti a te... 8)
-- 
Luc.

Scusate l'intromissione nell'accesso litigio over ip, ma volevo dire una
cosa a Luc: io non so niente del tipo VARIANT, ho visto la definizione su
questo ng ieri e allo stesso modo la funzione di conversione... Diciamo che
non ho mai avuto grande voglia di studiare...
Dai, su, cerchiamo di non litigare... d'altra parte sono un povero
programmatore per hobby 15enne (siamo in pochi e tutti un po' nevrotici).
"Luc" <XXX...@katamail.comXXX> ha scritto nel messaggio
news:MPG.161d1c1b6...@news.enter.it...


 programmatore per hobby 15enne (siamo in pochi e tutti un po' nevrotici).
E chi litigava? Ti sembrava un flame????
8)
PS: io ho iniziato a programmare 2 anni prima della tua nascita... devo 
essere super-nevrotico. ^_____^
-- 
Luc.

 essere super-nevrotico. ^_____^
Tutta la razza dei programmatori dovrebbe essere abbastanza nevrotica. E qui
si ritorna al discorso del flame ;-)