E2034 Impossible de convertir 'const char *' en 'const wchar_t *'
Si vous mettez à jour vos programmes vers CodeGear C++Borland 2009, vous trouverez peut être cette erreur :
E2034 Impossible de convertir 'const char *' en 'const wchar_t *'
Voici un exemple de code pour cette erreur :
Code:
Application->MessageBoxA(AnsiString("Impossible d'ouvrir le fichier "+AnsiString(nom)).c_str(),"erreur",MB_OK);
Voici la correction :
Code:
MessageBoxA(NULL,AnsiString("Impossible d'ouvrir le fichier "+AnsiString(nom)).c_str(),"erreur",MB_OK);
La correction marche aussi pour MessageBox, l'astuce est de ne pas oublier NULL, et d'enlever Application->
En espérant que cela aide d'autres personnes.;)
Utilisation de MessageBoxIndirect sous C++Builder
Une autre façon de faire afficher un Message Box est d'utiliser MessageBoxIndirect. L'avantage est que l'on peut mettre un icône personnalisé. Voici un exemple simple avec un icône standard:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| TMsgBoxParams BoxParam;
BoxParam.cbSize = sizeof(TMsgBoxParams);
BoxParam.hwndOwner = Application->Handle;
BoxParam.hInstance = NULL; // Set to NULL for standard system-defined icons
BoxParam.lpszText = L"Impossible d'ouvrir le fichier.";
BoxParam.lpszCaption = L"Erreur";
BoxParam.dwStyle = MB_OK | MB_USERICON; // MB_USERICON is needed for using lpszIcon
BoxParam.lpszIcon = MAKEINTRESOURCEW(IDI_ERROR);
BoxParam.dwContextHelpId = 0;
BoxParam.lpfnMsgBoxCallback = NULL;
BoxParam.dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
MessageBoxIndirectW(&BoxParam); |
Voici la liste des icônes standards:
- IDI_APPLICATION: Default application icon.
- IDI_ASTERISK: Same as IDI_INFORMATION.
- IDI_ERROR: Hand-shaped icon.
- IDI_EXCLAMATION: Same as IDI_WARNING.
- IDI_HAND: Same as IDI_ERROR.
- IDI_INFORMATION: Asterisk icon.
- IDI_QUESTION: Question mark icon.
- IDI_WARNING: Exclamation point icon.
- IDI_WINLOGO: Windows logo icon. Windows XP: Default application icon.
- IDI_SHIELD: Security Shield icon.
Pour utiliser la version ANSI il suffit d'enlever les W à la fin des fonctions et de mettre du texte sans le L devant.