Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    [C++] convertire un BSTR* in un CString*

    Salve a tutti, ho un BSTR* e vorrei convertirlo in un CString*.
    Sapete come si fa? Qualcuno puo' darmi una mano?

    Grazie e ciao
    Sandro

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se hai gli oggetti in questione allora basta

    CString csStr = bStr;

    Dato che hai dei puntatori, opera di conseguenza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    Dato che hai dei puntatori, opera di conseguenza.
    Ciao.
    Provando a mettere:

    codice:
     BSTR* ticketReturn;
     CString* resStr = ticketReturn;
    mi da quest'errore: error C2440: 'initializing' : cannot convert from 'BSTR *' to 'CString *'

    Mettendo:

    codice:
     BSTR* ticketReturn = (BSTR*)"No data available"; 
     CString resCStr;
     
     if (ticketReturn != NULL) {
      CString* resStr = (CString*)ticketReturn;
      resCStr = (CString)resStr->GetString();
     }
    quando esegue resCStr = (CString)resStr->GetString(); mi da quest'errore (sul debug di Visual Studio):

    Unhandled exception at 0x03fa76f0 in Terminale Utente.exe: 0xC0000005: Access violation reading location 0x64206f4e.

    E si pianta l'applicazione (e' un'applicazione per terminale mobile)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Facciamo un passo indietro ... tu hai solamente un puntatore a BSTR o hai effettivamente una stringa allocata di tipo BSTR?

    A cosa ti serve il puntatore a CString ? Lo devi passare ad una API ? Ad una tua funzione ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    Originariamente inviato da oregon
    Facciamo un passo indietro ... tu hai solamente un puntatore a BSTR o hai effettivamente una stringa allocata di tipo BSTR?
    Dunque inizialmente sono partito con un semplice BSTR* non inizializzato per passarlo ad una funzione di un web service client generato tramite il wizard dell'add web reference (sempre di Visual Studio ovviamente).
    Mi sono pero' accorto che il metodo a cui passavo il BSTR* usciva subito perche' testa su questo BSTR* e se lo trova NULL esce immediatamente.
    Allora ho provato ad inizializzarlo con:

    codice:
    BSTR* ticketReturn = (BSTR*)"No data available";
    L'effetto e' stato che il metodo della classe generata si pianta in un altro punto (che sara' magari oggetto di un altro post).
    Per poter gestire l'output della funzione (una semplice stringa di testo) volevo usare una CString con la quale ho dimestichezza e quindi devo mettere il contenuto di BSTR* in CString.

    Spero di aver chiarito un po' la questione!

    Ciao e grazie
    Sandro

  6. #6
    Ciao,

    Basta fare un cast a LPCSTR:

    codice:
    	BSTR* ticketReturn = (BSTR*)"No data available"; 
    	CString resCStr;
     
    	if (ticketReturn != NULL)
    	{
    		CString resStr = (LPCSTR)ticketReturn;	
    		AfxMessageBox(resStr);
    	}

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331
    Originariamente inviato da Vincenzo1968
    Ciao,

    Basta fare un cast a LPCSTR:

    codice:
    	BSTR* ticketReturn = (BSTR*)"No data available"; 
    	CString resCStr;
     
    	if (ticketReturn != NULL)
    	{
    		CString resStr = (LPCSTR)ticketReturn;	
    		AfxMessageBox(resStr);
    	}
    Funziona alla stragrande! Grazie mille!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.