Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - MessageBox
Forum - C/C++ - MessageBox

Avatar
dacanalr (Normal User)
Rookie


Messaggi: 26
Iscritto: 23/07/2009

Segnala al moderatore
Postato alle 13:52
Venerdì, 24/07/2009
Salve a tutti !Sto leggendo un tutorial sulle windows api ma gia' al primo programma trovo delle difficoltà!
Nell'effettuare una chiamata a MessageBox ricevo un errore :
error C2664: 'MessageBoxW': impossibile convertire il parametro 2 da 'const char [14]' a 'LPCWSTR'


Il prg facilissimo è questo :
Codice sorgente - presumibilmente C/C++

  1. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,LPSTR lpCmdLine, int nCmdShow)
  2. {
  3.     MessageBox(0,"Prova testo","Prova Titolo", MB_OK);
  4.     return 0;
  5. }



poi girando su internet/msdn ho trovato un esempio in cui la chiamata veniva fatta in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. MessageBox(0,(LPCTSTR)L"Prova testo",(LPCTSTR)L"Prova Titolo", MB_OK);



e sostituendola nel programma funziona anche da me!

Quindi ho tre domande:
1) perché il primo metodo (praticamente copiato da internet) non funziona?
2) perché nell'errore viene citata MessageBoxW e non MessageBox
3) nel cast che significato ha quella L e perché questa L va attaccata alla stringa mentre se la stacco con uno spazio mi da un errore?

Sono domande "importanti", me ne rendo conto, ma spero che mi rispondiate lo stesso!
Cioa

Ultima modifica effettuata da dacanalr il 24/07/2009 alle 13:54
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:25
Venerdì, 24/07/2009
evidentemente il progetto che hai creato(penso con visual studio) ha come settaggio predefinito di usare le stringhe come wchar_t *

da questo deriva che alla messagebox devi passare un argomento di quel tipo e non un normale char *

Te lo dice il compilatore stesso... MessageBoxW significa che il tuo compilatore sta chiamando la messagebox che prende in ingresso parametri con wchar_t (infatti termina per W)

invece di fare i cast potresti o usare sempre le wchar_t oppure andare nelle proprietà del progetto e cambiare da stringhe unicode a Multibyte array

PM Quote
Avatar
dacanalr (Normal User)
Rookie


Messaggi: 26
Iscritto: 23/07/2009

Segnala al moderatore
Postato alle 15:12
Venerdì, 24/07/2009
Perfetto, ho provato e funziona!
Pero' sono riuscito a trovare quella opzione facendo Progetto->Proprietà di MioProgetto
Esiste un metodo per impostarlo come default?

ciao

Ultima modifica effettuata da dacanalr il 24/07/2009 alle 15:13
PM Quote
Avatar
Daf (Normal User)
Pro


Messaggi: 78
Iscritto: 27/06/2009

Segnala al moderatore
Postato alle 14:39
Sabato, 25/07/2009
Testo quotato


Quindi ho tre domande:
1) perché il primo metodo (praticamente copiato da internet) non funziona?
2) perché nell'errore viene citata MessageBoxW e non MessageBox
3) nel cast che significato ha quella L e perché questa L va attaccata alla stringa mentre se la stacco con uno spazio mi da un errore?


2) Perchè MessageBox carica una funzione delle dll di windows che in esse si chiama MessageBoxW
3) Perchè la conversione al formato corretto richiede una conversione prima a Long e poi nel formato usato

PM Quote