cvb~ Δημοσ. 23 Ιουνίου 2020 Δημοσ. 23 Ιουνίου 2020 (επεξεργασμένο) Καλησπέρα. Χρησιμοποιώ για μεταγλωττιστή το TDM-GCC 9.2.0 64bit σε λειτουργικό Windows 8.1 64bit. Πρόκειται για ένα μικρό πρόγραμμα που εντοπίζει το όνομα του εκτελέσιμου αρχείου του ίδιου προγράμματος και το προβάλει σε μήνυμα στα ελληνικά με τη MessageBox(). Στη συνέχεια ακολουθεί και μια δεύτερη MessageBox() που εμφανίζει πάλι τα ελληνικά λανθασμένα. Πιο συγκεκριμένα το πρόβλημα είναι πως απ' τη μία η πρώτη MessageBox() προβάλλει στο σώμα του μηνύματος σωστά τα ελληνικά, απ' την άλλη τα βγάζει στον τίτλο του μηνύματος ως σκουπίδια. Η δε δεύτερη MessageBox() προβάλει τόσο τον τίτλο όσο και το σώμα του μηνύματος εντελώς ως σκουπίδια. Έχω κάνει διάφορες δοκιμές όπως προσθήκη του L πριν τα αλφαριθμητικά, αλλά δε κατάφερα το κάνω να δουλέψει σωστά. Για τη μεταγλώττιση χρησιμοποιώ την εντολή: gcc -mwindows δοκιμές.c -o δοκιμές.exe Επίσης χρησιμοποίησα και την παρακάτω εντολή: gcc -mwindows δοκιμές.c -o δοκιμές.exe -finput-charset=utf-8 -fexec-charset=cp737 αλλά με τα ίδια λανθασμένα αποτελέσματα. Εδώ είναι ο κώδικας του προγράμματος: /* δοκιμές.c - Παίρνει το όνομα του εκτελέσιμου αρχείου του προγράμματος και το προβάλλει σε μήνυμα στα ελληνικά */ #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { char szFileName[MAX_PATH]; GetModuleFileName(hInstance, szFileName, MAX_PATH); MessageBox(NULL, szFileName, "Αυτό το πρόγραμμα είναι το:", MB_OK | MB_ICONINFORMATION); MessageBox(NULL, "Δοκιμές στα ελληνικά", "Μήνυμα", MB_OK | MB_ICONINFORMATION); return 0; } Εδώ είναι τα δύο μηνύματα όπως τα προβάλλει το πρόγραμμα μετά την εκτέλεση του: Επεξ/σία 23 Ιουνίου 2020 από cvb~
albNik Δημοσ. 23 Ιουνίου 2020 Δημοσ. 23 Ιουνίου 2020 (επεξεργασμένο) δοκιμασε MessageBoxW https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw ή MessageBox(NULL,(LPCWSTR)L"Δοκιμές στα ελληνικά",(LPCWSTR)L"Μήνυμα", MB_OK | MB_ICONINFORMATION); Επεξ/σία 23 Ιουνίου 2020 από albNik
NewProject Δημοσ. 23 Ιουνίου 2020 Δημοσ. 23 Ιουνίου 2020 18 λεπτά πριν, albNik είπε δοκιμασε MessageBoxW https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxw ή MessageBox(NULL,(LPCWSTR)L"Δοκιμές στα ελληνικά",(LPCWSTR)L"Μήνυμα", MB_OK | MB_ICONINFORMATION); ή απλά να ρυθμίσει το solution για Unicode ...
cvb~ Δημοσ. 23 Ιουνίου 2020 Μέλος Δημοσ. 23 Ιουνίου 2020 Άλλαξα τον τύπο δεδομένων του πίνακα szFileName[] σε wchar_t και άλλαξα την GetModuleFileName() σε GetModuleFileNameW(). Επίσης χρησιμοποίησα την MessageBoxW(), όπως μου γράψατε. Εμφανίζει τώρα σωστά τα ελληνικά. Σας ευχαριστώ για την βοήθεια. Εδώ είναι ο διορθωμένος (θέλω να ελπίζω) κώδικας: #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { wchar_t szFileName[MAX_PATH]; GetModuleFileNameW(hInstance, szFileName, MAX_PATH); MessageBoxW(NULL, szFileName, L"Αυτό το πρόγραμμα είναι το:", MB_OK | MB_ICONINFORMATION); MessageBoxW(NULL, L"Δοκιμές στα ελληνικά", L"Μήνυμα", MB_OK | MB_ICONINFORMATION); return 0; }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα