Newsgroup: it.comp.programmare.win32
Titolo: VC convertire un BSTR in una stringa

*** post for FREE via your newsreader at 
post.newsfeeds.com
 ***
Buongiorno.
Sto crendo un componente col VC++ (per esigenze di ufficio devo usare
il VC) che deve esportare dei metodi con dei parametri.
Se come parametri scelgo [in] BSTR come faccio poi a convertire sto
dannato oggetto in una stringa senza usare sta cosa (mi vergogno un
po....):
char* strCommand = new char[1024];
for (i=0; i< ::SysStringLen (username); i++)
	strcat(strCommand , (LPCSTR)(username+i));
c'e un modo + elegante? magari lavorando con un oggetto tipo string o
CString (che pero non conosco)
grazie
-----= Posted via Newsfeeds.Com, Uncensored Usenet News =-----
http://www.newsfeeds.com
 - The #1 Newsgroup Service in the World!
-----==  Over 90,000 Newsgroups - 16 Different Servers! =-----

grazie
BSTR   A 32-bit character pointer.
LPSTR   A 32-bit pointer to a character string.
LPCTSTR   A 32-bit pointer to a constant character string that is
portable for Unicode and DBCS.
questi sono i tipi dati che riporta msdn ...
ora dato che dici che devi interfaccia, il tipo LPCTSTR é il + adatto
e lo puoi passare tranqullamente ....
poi scusa la mia ignoranza ...
un strcpy(strCommand, (LPCTSTR)username) non era buono ??
oppure un oggetto di tipo CString
CString strCommand(username);
no ?
cod

 
Puoi usare la classe _bstr_t (definita in comdef.h, è quella che 
utilizza il compilatore quanto genera le classi "wrapper" tramite 
#import) o ComBSTR (se usi ATL).
La classe string (o meglio basic_string, visto che potresti anche usare 
UNICODE) è parte della libreria standard C++, ma non prevede conversioni 
con i tipi OLE.
In ogni caso fai attenzione alle copie (rischi di non deallocare delle 
stringhe) e alle disallocazioni "automatiche" tramite il distruttore
(rischi di rilasciare stringhe che non dovrebbero essere rilasciate).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

CString strCommand(username);
non so, VC e la prima volta che lo uso e con lui le MFC (ho fatto la
tesi con builder di borland..) e non sono riuscito a far vedere le
CString nel senso che ho incluso Afx.h e quando compilo mi dice
qualcosa tipo... "windows.h already included"
Boh, credevo che i namespace servissero a questo... ma non ci ho perso
tanto tempo...non so


qualcosa tipo... 
mfc é porcheria ...
cmq il namespace con afx.h non c'entra nulla
ma devi includere stdafx.h
cod

 potrebbe incontrare uno 0 e terminare ..
BSTR è un puntatore a OLECHAR, che è un typedef per wchar_t. La
particolarità sta nel fatto che la stringa stessa è preceduta da - se
non ricordo male - un int che ne indica la lunghezza. Il trucco e' che
a volte la stringa UNICODE non e' affatto una stringa UNICODE, dato
che qualche programmino non troppo furbo usa lo stesso sistema per
passare dati binari.
Direi che per passare da BSTR a char* puoi usare WideCharToMultiByte
(o come cribbio si chiama, non ho l'SDK qui), e per passare da char* a
BSTR usi prima MultiByteToWideChar (per convertire la stringa in
UNICODE), e poi SysAllocString (per creare la BSTR).
Saluti
Zello

 ha scritto nel messaggio
news:3b5ec972...@127.0.0.1...


 ha scritto nel messaggio
news:3b5ec972...@127.0.0.1...
