 |
Coders' city Nasza pasja to programowanie!
|
| Zobacz poprzedni temat :: Zobacz następny temat |
| Autor |
Wiadomość |
samolot
Dołączył: 26 Sty 2006 Posty: 5404 Skąd: Toruń
|
Wysłany: Czw Lut 09, 2012 1:58 pm Temat postu: [WinAPI] Funkcja GetVersion - zwracana liczba jako DWORD |
|
|
Funkcja API GetVersion zwraca wartość typu DWORD. W opisie tej funkcji pisze że ona zwraca liczbe typu Long Rozumiem ,że typ Long jest liczbą 32 bitową, czyli slowem podwójnym, zwanym DWORD Dlaczego stasuje sie dwie nazwy zamiennie Long i DWORD i czym to sie rożni? Które słowo jest w DWORD starsze a które młodsze? U mnie funkcja GetVersion zwraca wartośc: 393347078 (mam Vistę)
Jak to sie ma do DWORD?
Wiem, że GetVersion jest funkcją starszą i ż już nie powinno jej używać, że powinno sie używać GetVersionEx, ale mi wlaśnie chodzi o to, by z poziomu programu napisenego w VB.NET najpierw sprawdzać starszą metodą i mniej 'nowatorską' , na jakim systemie aplikacja jest instalowana, i, w zalezności od sprawdzenia, w razie czego poinformować uzytkownika, że sie nie da zainstalować, a nie żeby program zrobił "krach" _________________ Vista SP2+VB 2008 EE + .NET 3.5 + IE 9.0.8112 /431 przykładowych programów do Warsztatu programisty (Helion) W życiu bowiem istnieją rzeczy , o które warto walczyć do samego końca. (P. Coelho)
Ostatnio zmieniony przez samolot dnia Czw Lut 09, 2012 5:15 pm, w całości zmieniany 1 raz |
|
| Powrót do góry |
|
 |
|
|
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Czw Lut 09, 2012 3:02 pm Temat postu: Re: [API] Zwracana liczba jako DWORD |
|
|
| samolot napisał: | Funkcja API GetVersion zwraca wartość typu DWORD. W opisie tej funkcji pisze że ona zwraca liczbe typu Long Rozumiem ,że typ Long jest liczbą 32 bitową, czyli slowem podwójnym, zwanym DWORD Dlaczego stasuje sie dwie nazwy zamiennie Long i DWORD i czym to sie rożni? | Wg dokumentacji jest DWORD. Long nie widzę.
| samolot napisał: | Które słowo jest w DWORD starsze a które młodsze? U mnie funkcja GetVersion zwraca wartośc: 393347078 (mam Vistę) | Zgodnie z układem bajtów maszyn, na których uruchamia się Windowsy, czyli little endian. Najpierw idzie najmłodszy bajt.
| samolot napisał: | Wiem, że GetVersion jest funkcją starszą i ż już nie powinno jej używać, że powinno sie używać GetVersionEx, ale mi wlaśnie chodzi o to, by z poziomu programu napisenego w VB.NET najpierw sprawdzać starszą metodą i mniej 'nowatorską' , na jakim systemie aplikacja jest instalowana, i, w zalezności od sprawdzenia, w razie czego poinformować uzytkownika, że sie nie da zainstalować, a nie żeby program zrobił "krach" |
- GetVersionEx jest obecne przynajmniej od NT 5.0
- Programu, korzystającego z .NET 3.0 lub nowszego, nie da się uruchomić na systemach starszych niż NT 5.1.
Wnioskuję z tego, że obawy są na wyrost, chyba że używasz starszej wersji .NET. _________________ Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok. "Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza |
|
| Powrót do góry |
|
 |
izaw

Dołączył: 12 Wrz 2008 Posty: 2003 Skąd: Łódź
|
Wysłany: Czw Lut 09, 2012 3:07 pm Temat postu: |
|
|
Odnośnie typów używanych w WinAPI (API ma każda biblioteka) masz w msdn.
Co do funkcji GetVersionEx to tutaj (na dole) masz, że działa od Windows 2000. Zatem zapewne możesz ją spokojnie użyć. _________________ Program nie robi tego co chce programista, ale to co programista zaprogramował |
|
| Powrót do góry |
|
 |
samolot
Dołączył: 26 Sty 2006 Posty: 5404 Skąd: Toruń
|
Wysłany: Czw Lut 09, 2012 4:17 pm Temat postu: |
|
|
| marcin_an napisał: | | Wg dokumentacji jest DWORD. Long nie widzę. |
Deklaracja tej funkcji wyglada tak:
| Kod: |  Private Declare Function GetVersion Lib "kernel32" () As Long
|
Na końcu za nawiasem mamy As Long Z tego wnoszę, że powinna zwrócić Long. Użycie jej tak:
| Kod: |  Dim Ver As Long
 Ver = GetVersion()
|
czyli przyjęcie wyniku do zmiennej typu Long nie kończy sie błędem. Mam rozumieć, że Long=DWORD ? Czy może raczej DWORD to tak jak UInt32 , czyli typ nieujemny?
| marcin_an napisał: | | Wnioskuję z tego, że obawy są na wyrost, chyba że używasz starszej wersji .NET. | | izaw napisał: | | Co do funkcji GetVersionEx to tutaj (na dole) masz, że działa od Windows 2000. Zatem zapewne możesz ją spokojnie użyć |
Nie chodzi o to, jakiej ja wersji .NET używam , ale o to , na jakim systemie operacyjnym zostanie uruchomiony mój program i jeśli na starszym, to żeby sie zaraz nie wywalił, tylko przeszedł do mniej wymagajacego modułu programu, który wykona zadanie w ograniczonym zakresie nie uzywajacych nowszych funkcji. _________________ Vista SP2+VB 2008 EE + .NET 3.5 + IE 9.0.8112 /431 przykładowych programów do Warsztatu programisty (Helion) W życiu bowiem istnieją rzeczy , o które warto walczyć do samego końca. (P. Coelho) |
|
| Powrót do góry |
|
 |
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Czw Lut 09, 2012 4:35 pm Temat postu: |
|
|
| samolot napisał: | Deklaracja tej funkcji wyglada tak:
| Kod: |  Private Declare Function GetVersion Lib "kernel32" () As Long
|
Na końcu za nawiasem mamy As Long Z tego wnoszę, że powinna zwrócić Long. Użycie jej tak:
| Kod: |  Dim Ver As Long
 Ver = GetVersion()
|
czyli przyjęcie wyniku do zmiennej typu Long nie kończy sie błędem. Mam rozumieć, że Long=DWORD ? Czy może raczej DWORD to tak jak UInt32 , czyli typ nieujemny? | DWORD jest w definicji dla C, gdzie dołączane są nagłówki Windowsa. DWORD jest 32-bitową liczbą całkowitą bez znaku (co nie oznacza, że akurat liczba musi na tych 32 bitach być przechowywana!). Ponieważ w VB nie ma odpowiedniego typu, używa się innego typu, który jest w stanie przechować 32 bity i akurat wypada na Long. | samolot napisał: | Nie chodzi o to, jakiej ja wersji .NET używam , ale o to , na jakim systemie operacyjnym zostanie uruchomiony mój program i jeśli na starszym, to żeby sie zaraz nie wywalił, tylko przeszedł do mniej wymagajacego modułu programu, który wykona zadanie w ograniczonym zakresie nie uzywajacych nowszych funkcji. | Właśnie chodzi o to, jakiej wersji .NET używasz. Jeżeli korzystasz z nowszych wersji .NET, to i tak nie uruchomisz tego programu na systemach, na których mogłoby nie być GetVersionEx, bo nie da sie na nich zainstalować odpowiednio nowego frameworka.
Swoją drogą: aż mnie zaskoczyło, że jest Windows 2000 wymieniony. Czyżby ktoś w Microsofcie się pomylił i zapomnieli zafałszować dokumentacji dla tej funkcji? _________________ Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok. "Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza |
|
| Powrót do góry |
|
 |
samolot
Dołączył: 26 Sty 2006 Posty: 5404 Skąd: Toruń
|
Wysłany: Czw Lut 09, 2012 5:12 pm Temat postu: |
|
|
| Cytat: | | Jeżeli korzystasz z nowszych wersji .NET, to i tak nie uruchomisz tego programu na systemach, na których mogłoby nie być GetVersionEx |
Napisałem moje uzasdnienie trochę 'odwrotnie'. Ja sobie zdaje sprawę, że na zbyt starym systemie nie uruchomię programu napisanego w .NET. Myślałem o napisaniu małego modułu w VB6 , ktory by sprawdzał to co trzeba i zależnie od tego uruchamiał wersje z NET , albo wersje bez .NET. Ale nie sadzę, by ktoś miał uruchamiać mój program na systemie starszym niz Win 2000. Chciałem zacząć sprawdzanie od użycia funkcji API, bo ona zadziała na starszym Windowsie, bez .NET ,bo są przecież nowsze syetemy jak Win XP , których użytkownicy nie mają żadnych bibliotek uruchomieniowych dotyczacych .NET i program z uzyciem .NET nie zadziała.
Zdarza sie, że funkcja dodana w NET 3.5, czy 4.0 nie zadziała u kogoś , kto ma .NET w wersji. 2.2 czy 1.0. Teraz programem napisanym w VB6 pobieram wersje Visty i dostaję wynik:
| Cytat: | System operacyjny: Wersja Windows: 6.0 Service Pack 2 Build: 6002 |
Czyli moduł napisany w VB6 będze mógł uruchomić program napisany z użyciem .Net. _________________ Vista SP2+VB 2008 EE + .NET 3.5 + IE 9.0.8112 /431 przykładowych programów do Warsztatu programisty (Helion) W życiu bowiem istnieją rzeczy , o które warto walczyć do samego końca. (P. Coelho) |
|
| Powrót do góry |
|
 |
izaw

Dołączył: 12 Wrz 2008 Posty: 2003 Skąd: Łódź
|
Wysłany: Czw Lut 09, 2012 5:27 pm Temat postu: |
|
|
Martwisz się o net i wersję frameworka, a sprawdzasz wersję systemu... Nie lepiej wprost wypytać system o wersję net? Zresztą pewnie każda wersja od 2.0 Cię zadowoli. _________________ Program nie robi tego co chce programista, ale to co programista zaprogramował |
|
| Powrót do góry |
|
 |
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Czw Lut 09, 2012 5:43 pm Temat postu: |
|
|
Z tego, co widzę, nie dowiemy się z oficjalnej dokumentacji, od kiedy GetVersionEx jest dostępna. W GetVersion jest ustawiona nieprawdziwa informacja o wersji i jest ona taka sama, jak w GetVersionEx, więc możliwe, że i tutaj zmienili dane na błędne.
llAPI [url=http://allapi.mentalis.org/apilist/GetVersionEx.shtml]sugeruje[url], że GetVersionEx działa od Windowsa 95. Biorąc pod uwagę, że na 95 nie odpalisz programu w VB6 bez instalowania wielu dodatkowych bibliotek, do tego zadania powinno to wystarczyć. AllAPI nie jest bezbłędne, ale jeżeli nie możemy liczyć na producenta, to pozostają takie witryny. _________________ Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok. "Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza |
|
| Powrót do góry |
|
 |
samolot
Dołączył: 26 Sty 2006 Posty: 5404 Skąd: Toruń
|
Wysłany: Czw Lut 09, 2012 6:17 pm Temat postu: |
|
|
| izaw napisał: | | ...a sprawdzasz wersję systemu... | To początek zajecia się tym tematem, zacząłem od systemu, jako od czegoś , co przed .NET istniało. Postanowiłem nauczyć sie skutecnie sprawdzać wersję Windowsa.
| marcin_an napisał: | | jest ustawiona nieprawdziwa informacja |
| marcin_an napisał: | | możliwe, że i tutaj zmienili dane na błędne |
Czy mozesz rozwinąć dlaczego tak jest, albo czy dlaczego tak uważasz? Celowo fałszują informację? _________________ Vista SP2+VB 2008 EE + .NET 3.5 + IE 9.0.8112 /431 przykładowych programów do Warsztatu programisty (Helion) W życiu bowiem istnieją rzeczy , o które warto walczyć do samego końca. (P. Coelho) |
|
| Powrót do góry |
|
 |
marcin_an Site Admin
Dołączył: 26 Maj 2005 Posty: 17278 Skąd: z drugiej strony Kabla
|
Wysłany: Czw Lut 09, 2012 6:55 pm Temat postu: |
|
|
| samolot napisał: | | Czy mozesz rozwinąć dlaczego tak jest, albo czy dlaczego tak uważasz? Celowo fałszują informację? | Dlaczego tak uważam? Bo widziałem :D. Pozmieniano dokumentację tak, żeby sugerowała, że żadna funkcja nie będzie działała bez Windowsa XP* (lub nowszego). Dlaczego tak jest? Nie wiem, ale takie sfałszowanie informacji gwarantuje, że producenci oprogramowania będą musieli napisać, że ich produkty wymagają WindowsXP niezależnie od tego, czy jest to prawda, czy nie. A to wymusi na użytkownikach starszych wersji aktualizację systemu, co dla Microsoftu oznacza same korzyści. Tak bezpośrednie (pieniądze ze sprzedaży systemów), jak i pośrednie (np. cięcie kosztów przez porzucenie wstecznej zgodności własnych produktów, większe rozpowszechnienie .NET i reklamę dla Visty, która jakoś 2-3 lata później się pojawiła). Ale to tylko teoria i nam pozostaje tylko spekulować - prawdę znają tylko ci, którzy podejmowali taką decyzję.
Btw: przypomniałem sobie, że na archive.org mogą mieć starą wersję i nie myliłem się: Prawdziwa dokumentacja GetVersion (wybierz "Imatient", jeżeli nie chcesz czekać, aż skończy animację dla przekierowań). Jest to ostatnia wersja przed "zniknięciem" informacji o starszych systemach. W kolejnym zrzucie (z grudnia 2007) już tego nie ma.
Kopia dokumentacji GetVersionEx z 2007. Czyli możesz bezpiecznie używać.
____ * W niektórych przypadkach, jak widać, podano Windows2000, ale to też nie jest prawda. _________________ Matematyka to taki twór, który pozwala opisać sokowirówkę jako urządzenie pobierające ujemne odpadki i produkujące z nich sok. "Lameria atakuje" | RTFM | UMLet - edytor UML inaczej | Wykłady ks.Pawlukiewicza
Ostatnio zmieniony przez marcin_an dnia Czw Lut 09, 2012 7:31 pm, w całości zmieniany 3 razy |
|
| Powrót do góry |
|
 |
|
|
Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Możesz dodawać załączniki na tym forum Możesz pobierać pliki z tego forum
|
 Debug: strone wygenerowano w 0.26437 sekund, zapytan = 9
|