Article View: pl.comp.lang.c
Article #309528Treat enums as ints - czy to normalna praktyka
From: Piotr Gałka
Date: Sat, 09 Dec 2017 13:45
Date: Sat, 09 Dec 2017 13:45
71 lines
4821 bytes
4821 bytes
Jestem niedzielnym programistą (Builder). Nigdy nie korzystałem świadomie z bibliotek napisanych przez kogoś innego (wiem, że to prawie nienormalne). Jakiś czas temu, jak zwykle biegiem i na szybciutko potrzebowałem dołożyć obsługę urządzenia przez winusb. To pierwszy przypadek, gdy na liście plików mojego projektu znalazł się jakiś nie mój plik .lib. Udało mi się, zadziałało i zostało odłożone i zapomniane. Wczoraj potrzebowałem skomunikować się z innym urządzeniem winusb. Komunikację chciałem dołożyć do programu, który napisałem w 2010r dlatego nie zacząłem od kopii tego projektu działającego z winusb tylko przeniosłem plik .cpp obsługi tego urządzenia do tego starego projektu. No i zmarnowałem pół dnia - źle mi rozpoznawało dostępne Pipe. A że było kilka zmian: - mój program inny, - chyba tamto mi działało pod XP, a teraz WIN7, - oprogramowanie tego urządzenia też jest jeszcze nie sprawdzone. Ponieważ skopiowanego cpp w tym fragmencie początkowego rozpoznania urządzenia nie modyfikowałem więc zafiksowałem się, że przyczyna błędu musi być zewnętrzna. Po spięciu z bratem, który napisał program do urządzenia okazało, się, że coś tam zrobił inaczej i Pipe 1 ma dwukierunkową, a ja widzę w moim programie, że biorę każdą Pipe po kolei i ustalam czy jest IN, czy OUT ale nie ma możliwości, że w dwie strony (to jest kopia jakiegoś standardowego przykładu). Moja hipoteza - może w USB można dwukierunkowo, ale może w winusb tego nie przewidzieli. Zmienił mi tak jak było w tym urządzeniu co kiedyś tam mi działało i .... nie pomogło - dalej to samo - mój program znajduje dwie Pipe, ale obie są OUT. No to zacząłem szukać problemu z WIN7. Znajduję, że trzeba dograć jakieś winusb.sys, i nawet jakieś opisy jak to zrobić, ale dla mnie niejasne i nie znalazłem nigdzie tych plików co miałyby do tego służyć. Wymyśliłem też, że może dla winusb.dll muszę wygenerować nowe .lib. Nigdy tego nie robiłem, ale doszedłem do tego jak to zrobić - sprawdziłem kilka kombinacji przełączników przy generowaniu lib ale nadal nic. Zrobiła się 21 i odłożyłem sobie to na dziś. Przespałem się z problemem i mnie olśniło, że zmiana z XP na WIN7 to jednak chyba była wcześniej niż tamto co mi działało. Dziś sprawdziłem, że faktycznie więc wyszło na to, że to jednak u mnie coś nie halo. Odkryłem. Okazuje się, że koniecznie w projekcie muszę mieć włączoną flagę "Treat enum types as ints". A w tym projekcie do którego skopiowałem to moje cpp nie miałem tej flagi, a skąd wtedy wiedziałem, że mam ją tam włączyć to nie pamiętam - próbowałem trochę pogooglać, czy gdzieś enum i winusb się razem pojawią, że może gdzieś widziałem taki komentarz, ale nie znalazłem. Tak samo w plikach .h związanych z tą winusb.lib też nie znalazłem takiej wzmianki. Mi się wydaje, że jakiekolwiek biblioteki to powinny być tak pisane aby reprezentacja jakichkolwiek danych nie zależała od jakiejś tam flagi. Chyba da się to tak napisać. Czy się mylę? A jeśli się nie da to chyba w każdym pliku .h powinno na samym początku być większą czcionką i BOLD :) napisane. Na stronach microsoftu znajdowanych zaczynając od hasła WINUSB_PIPE_INFORMATION też nie znajduję niczego co by mnie naprowadziło na źródło problemu. Może w przyszłości zdarzy mi się jeszcze jakiejś biblioteki użyć i dlatego pytanie do tych, którzy korzystali z obcych bibliotek. Czy to jest standard, że dla każdej biblioteki muszę skądś wiedzieć jak poustawiać flagi kompilacji, czy miałem wyjątkowego pecha, że trafiłem na taką wredną, co zamiast określić jednoznacznie rozmiar składowych struktury to zrobiła to zależnie od flag kompilacji? P.G.
Technical Details
Message-ID:
<p0gpeb$2qa$1$PiotrGalka@news.chmurka.net>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.213.192.88.238!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.213.192.88.238!not-for-mail From: Piotr Gałka <piotr.galka@cutthismicromade.pl> Newsgroups: pl.comp.lang.c Subject: Treat enums as ints - czy to normalna praktyka Date: Sat, 9 Dec 2017 14:45:53 +0100 Organization: news.chmurka.net Message-ID: <p0gpeb$2qa$1$PiotrGalka@news.chmurka.net> NNTP-Posting-Host: 213.192.88.238 Mime-Version: 1.0 Injection-Date: Sat, 9 Dec 2017 13:45:47 +0000 (UTC) Injection-Info: news.chmurka.net; posting-account="PiotrGalka"; posting-host="213.192.88.238"; logging-data="2890"; mail-complaints-to="abuse-news.(at).chmurka.net" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 X-Mozilla-News-Host: news://news.chmurka.net:119 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit