Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Skrócony regulamin

[WinAPI] Funkcja GetVersion - zwracana liczba jako DWORD

Idź do strony 1, 2  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 5404
Skąd: Toruń

PostWysłany: Czw Lut 09, 2012 1:58 pm      Temat postu: [WinAPI] Funkcja GetVersion - zwracana liczba jako DWORD Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Czw Lut 09, 2012 3:02 pm      Temat postu: Re: [API] Zwracana liczba jako DWORD Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
izaw



Dołączył: 12 Wrz 2008
Posty: 2003
Skąd: Łódź

PostWysłany: Czw Lut 09, 2012 3:07 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 5404
Skąd: Toruń

PostWysłany: Czw Lut 09, 2012 4:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Czw Lut 09, 2012 4:35 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 5404
Skąd: Toruń

PostWysłany: Czw Lut 09, 2012 5:12 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
izaw



Dołączył: 12 Wrz 2008
Posty: 2003
Skąd: Łódź

PostWysłany: Czw Lut 09, 2012 5:27 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Czw Lut 09, 2012 5:43 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
samolot



Dołączył: 26 Sty 2006
Posty: 5404
Skąd: Toruń

PostWysłany: Czw Lut 09, 2012 6:17 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
marcin_an
Site Admin


Dołączył: 26 Maj 2005
Posty: 17278
Skąd: z drugiej strony Kabla

PostWysłany: Czw Lut 09, 2012 6:55 pm      Temat postu: Odpowiedz z cytatem Pisownia

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
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
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
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie |