_tmain e UNICODE

di il
3 risposte

_tmain e UNICODE

Buongiorno a tutti,
sto cercando di realizzare un'applicazione console con VS2005 e sto impazzendo con le conversioni. Premetto che ho utilizzato il wizard del VS per preare il progetto e non ho inserito ne librerie MFC ne ATL. Ora .... rispetto al normale C++ che utilizzavo prima sembra tutto cambiato. Leggo qua e la che il metodo principale (_tmain) definisce il modo unicode che occorre utilizzare tutte le funzioni ad esso associate. Vabbè provo.....poi utilizzo una chiamata alle api di windows standard, nella fattispecie GetLogicalDrives().
Il risultato (corretto) non riesco ad utilizzarlo...addirittura non lo mostro a video neppure. L'esempio sottostante compila e genera il progetto, ma non funziona..

_TCHAR cFreeDrive;
cFreeDrive = PrimoDriveUtile();
printf_s("pippo %S\n",cFreeDrive);

Quando prima facevo ritornare un char alla funzione PrimoDriveUtile() cFreeDrive era 'G' ora che faccio ritornare un _TCHAR mi ritorna L'G'. Inoltre leggo sulla MSDN che se è inclusa la tchar.h (cosa fatta dal wizard in automatico) occorre usare le funzioni unicode...bene utilizzo allora _tprintf_s ... ore non compila più.
C'è qualche anima gentile che mi spieghi come risolvere questo problema di conversioni?
Grazie.

3 Risposte

  • Re: _tmain e UNICODE

    Scusa ma la GetLogicalDrives() ritorna un DWORD, quindi un unsigned long e non un TCHAR. Comunque L"testo", L è una macro che converte un char* in Unicode. Comunque prova a postare il codice della funzione PrimoDriveUtile().
  • Re: _tmain e UNICODE

    _TCHAR PrimoDriveUtile(void) {
    DWORD dwRet;
    UINT nDrive=2;

    //Estrazione della maschera dei drive utilizzati
    dwRet = GetLogicalDrives();
    //Ricerca del primo bit a 0 escluso i drive A e B
    while( (dwRet & (1 << nDrive)) ) {
    nDrive++;
    }
    return (_TCHAR)('A' + nDrive);
    }
  • Re: _tmain e UNICODE

    Comunque per usare la _tprintf_s() nel tuo esempio viene:
    _TCHAR cFreeDrive;
    cFreeDrive = PrimoDriveUtile();
    _tprintf_s(L"pippo %S\n",&cFreeDrive);
    il primo parametro della stringa va convertito in Unicode(quindi L), mentre al secondo devi passare l'indirizzo della variabile _TCHAR.
Devi accedere o registrarti per scrivere nel forum
3 risposte