cvb~ Δημοσ. 16 Ιουλίου 2018 Δημοσ. 16 Ιουλίου 2018 Καλημέρα. Χρησιμοποιώ για μεταγλωττιστή το tdm-gcc. Προσπαθώ να μεταγλωττίσω κώδικα που το εκτελέσιμο είναι ένα απλό παράθυρο για Windows που έχει ένα εικονίδιο και δύο μενού. Συγκεκριμένα ακολουθώ αυτές εδώ τις οδηγίες http://www.winprog.org/tutorial/menus.html . Όμως το πρόγραμμα αν και μεταγλωττίζεται με επιτυχία χωρίς warnings, μεταγλωττίζεται χωρίς το εικονίδιο και το μενού. Ωστόσο ο δεύτερος τρόπος που προτείνεται στον οδηγό, με την ενσωμάτωση δηλαδή του κώδικα των πόρων στο αρχείο .c, και με την απευθείας φόρτωση του εικονιδίου από το εκτελέσιμο κατά την διάρκεια της εκτέλεσης λειτουργεί. Ο κώδικας για την πρώτη περίπτωση που μου έχει δημιουργήσει το πρόβλημα που περιέγραψα βρήσκεται εδώ https://www.dropbox.com/s/kthghfedcfgaov6/forgers-win32-tutorial-source.zip?dl=0&file_subpath=%2Fsource%2Fmenu_one . Ο κώδικας που αν και με μερικά warnings μεταγλωττίζεται σωστά, με το εικονίδιο δηλαδή και το μενού, βρίσκεται εδώ https://www.dropbox.com/s/kthghfedcfgaov6/forgers-win32-tutorial-source.zip?dl=0&file_subpath=%2Fsource%2Fmenu_two . Δε καταλαβαίνω τι συμβαίνει, έψαξα και αλλού στο internet αλλά δεν μπόρεσα να βρω άκρη. Ευχαριστώ.
_Gikoskos_ Δημοσ. 16 Ιουλίου 2018 Δημοσ. 16 Ιουλίου 2018 Δεν εχω χρησιμοποιησει tdm-gcc αλλα για να κανεις compile resource αρχεια (.rc) πρεπει να ειναι παρον ενας resource compiler. Στο mingw-w64 που εχω χρησιμοποιησει πχ υπαρχει το windres (το visual studio αντιστοιχα εχει το RC). Οταν περασεις το .rc απο το windres και σου παραγει ενα αντικειμενικο αρχειο (.ο), το κανεις διασυνδεση με τον υπολοιπο σου κωδικα C/C++ κανονικα με τον gcc. Με αλλα λογια δειξε το Makefile/τις εντολες που χρησιμοποιεις για να κανεις compile το προγραμμα, για να δω τι παιζει wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON)); κατι ακυρο αλλα τα GetModuleHandle(NULL) calls μεσα στην main() ειναι περιττα γτ σου επιστρεφουν στην ουσια το hInstance που το εχεις ηδη ορισμενο wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
cvb~ Δημοσ. 16 Ιουλίου 2018 Μέλος Δημοσ. 16 Ιουλίου 2018 Makefile δεν έχω. Ο συγγραφέας του tutorial χρησιμοποιεί .vcproj αρχεία στον κώδικα του. Η εντολή που δίνω στην κονσόλα για να μεταγλωττίσω τον κώδικα είναι gcc menu_one.c -ο menu_one.exe -mwindows Την GetModuleHand() την χρησιμοποιώ γιατί έτσι την έχει στο tutorial.
_Gikoskos_ Δημοσ. 16 Ιουλίου 2018 Δημοσ. 16 Ιουλίου 2018 Κοιταξα λιγο το τουτοριαλ να δω τι εστι αλλα και αυτος το ιδιο λεει εδω Αναφορά σε κείμενο Now an example of how to use a resource in your program. HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON)); The first parameter of LoadIcon() and many other resource using functions is the handle to the current instance (which we are given in WinMain() and can also be retreived by using GetModuleHandle() as demonstrated in previous sections). The second is the identifier of the resource. Περα απο αυτο το resource script σου δεν γινεται compile πουθενα. Να ξυσει τις μασχαλες του ο λινκερ για να το βρει; Τρεξε κατι τετοιο windres resource.rc resource.o gcc menu_one.c resource.o -o menu_one.exe -mwindows αλλα βλεπεις πως αν τα resources γινουν αρκετα, λογω πολυπλοκοτητας δεν συμφερει να το κανεις χειροκινητα. Καλυτερα Makefile απο τωρα (αφου χρησιμοποιεις GCC toolchain) για να το συνηθισεις. Εξαλλου και το βιζουαλ στουδιο εχει δικα του Makefiles βασισμενα στο GNU Μake, απλα ειναι πιο περιορισμενα σε λειτουργικοτητα. στο γιτχαμπ εχω αρκετα winAPI προτζεκτς που εχω στησει με αυτο το toolchain
cvb~ Δημοσ. 16 Ιουλίου 2018 Μέλος Δημοσ. 16 Ιουλίου 2018 Εντάξει το πρόβλημα λύθηκε. Έγινε η μεταγλώττιση κανονικά με την συμπερίληψη στο gcc του αντικειμενικού κώδικα των πόρων του προγράμματος που έγινε με το windres όπως μου είπες. Οπότε τώρα τα εικονίδια και τα μενού εμφανίζονται κανονικά. Σε ευχαριστώ για την βοήθεια.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα