Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 07.07.2008, 21:40 Titel: MSDN, Funktionen, Windows Versionen |
|
|
Hi zusammen, mal wieder ne blöde Frage - diesmal an die MSDN Profis.
Ich nutze u.a. API Funktionen der kernel32.dll. Nun steht ja in der MSDN immer eine Angabe über Client/Server/Header/DLL Version etc.
Meine Frage - wie verlässlich sind diese Angaben?
Ein Beispiel. Bei der API Funktion CreateFile (http://msdn.microsoft.com/en-us/library/aa363858.aspx) steht unter Client: Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Aber die Funktion gab es doch auch schon unter Windows 95 - sprich es gibt sie doch eigentlich in alles 32-Bit Windows Varianten.
Liege ich da falsch, hab ich da einen Denkfehler? Wäre wichtig, da ich ja sicherstellen möchte unter welchen Systemen mein Programm später funktioniert - schließlich hab ich nicht jedes Betriebssystem installiert/verfügbar.
Danke. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 07.07.2008, 21:58 Titel: |
|
|
Ich habe festgestellt, dass die Angaben meistens zutreffen - aber nicht immer. Bei irgendeiner Funktion (GetGlobalMemoryStatusEx?) stand da 2000/XP/Vista, hat aber auch unter Win98 richtige Werte geliefert.
Im Zweifelsfall muss man es eben ausprobieren, oder einfach hoffen (wie bei sovielen Dingen von Microsoft...).
Allerdings kann das glaube ich auch zu den "Einsprungpunkt nicht gefunden"-Fehlern führen, die natürlich auch recht unschön sind.
Oder "einfach" OS Version ermitteln, und evtl. Vorgängerfunktionen oder Alternativen nutzten. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.07.2008, 22:21 Titel: |
|
|
Hi,
die online MSDN wird wohl laufend 'aktualisiert'
Auch wenn der Funktionsname schon unter älteren Win-Versionen existierte ändern sich Rückgabewerte, Konstante usw..
Ältere Versionen der MSDN kann man noch downloaden.
@28398
meinst du GlobalMemoryStatusEx ?
Wenn ich unter ME diese Funktion aufrufe (existiert in der kernel32.dll erst ab NT) wird mein Programm sofort beendet.
EDIT/
oder nachprüfen ob eine Funktion in einer DLL verfügbar ist:
Code: | 'API_Function_Exists.bas
'nach http://msdn.microsoft.com/de-de/library/bb979329.aspx
'für FreeBASIC umgeschrieben by Volta 08.07.2008
#Include Once "windows.bi"
Function FunctionExists(DllName As Any Ptr, FunctionName As Any Ptr) As UInteger
' ----------------------------------------------------------------
' Ermittelt, ob eine Funktion in einer Standard-DLL verfügbar ist.
' ----------------------------------------------------------------
' Parameter:
' - DllName: Name der Standard-DLL (mit oder ohne Pfad-
' angabe, mit oder ohne Erweiterung ".dll",
' z.B. "kernel32").
'
' - FunctionName: Name der zu prüfenden Funktion. Entspricht
' dem tatsächlichen Funktionsnamen im Alias-Teil
' einer Deklaration (Beispiel: "LoadLibraryA",
' *nicht* "LoadLibrary").
'
' Rückgabewert: <>0, wenn die gesuchte Funktion verfügbar ist.
' = 0, wenn die Funktion nicht verfügbar ist.
' ----------------------------------------------------------------
' Versuchen, die Bibliothek zu laden
Dim As HINSTANCE hModule = LoadLibrary(DllName)
If hModule <> 0 Then ' Bibliothek wurde gefunden
' Adresse der Funktion in der Bibliothek ermitteln
Dim As Uinteger lProcAddress = CUInt(GetProcAddress(hModule, FunctionName))
FreeLibrary hModule ' Bibliothek wieder freigeben
' Ist die Funktion nicht vorhanden, liefert GetProcAddress 0:
FunctionExists = lProcAddress
Else
Return 0 ' Bibliothek wurde nicht gefunden
End If
End Function
Print FunctionExists (@"kernel32",@"GlobalMemoryStatus")
Print FunctionExists (@"kernel32",@"GlobalMemoryStatusEx") 'bei Win9X,ME = 0
Sleep
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2008, 00:32 Titel: |
|
|
Wo habe ich den da gesucht?
Ich hatte irgendsowas wie 'MSDN von xx.xx.2000' gesehen?
äähh
.. finde ich nicht mehr!  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 09.07.2008, 08:11 Titel: |
|
|
@E-P-S ... Alternativ könntest du mit dem Preprozessor und ALIAS-Namen für die DLL Declarationen arbeiten. Allerdings musste dann wohl oder übel für jede Win-Version extra kompilieren.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 09.07.2008, 09:49 Titel: |
|
|
Vielen Dank erstmal für eure Hilfe.
Für jedes Windows extra compilieren schließe ich mal aus, dann lieber schreibe ich hin das es nur für XP etc. geeignet ist.
Ich hatte mich nur über die Angaben gewundert und wollte mal nachfragen - also danke nochmals. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 09.07.2008, 11:45 Titel: |
|
|
@volta:
afaik gibt es beide Funktionen erst ab Win2000...
MSDN zu GlobalMemoryStatus hat Folgendes geschrieben: | Client Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Server Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server. |
MSDN zu GlobalMemoryStatusEx hat Folgendes geschrieben: | Client Requires Windows Vista, Windows XP, or Windows 2000 Professional.
Server Requires Windows Server 2008, Windows Server 2003, or Windows 2000 Server. |
Zuletzt bearbeitet von 28398 am 09.07.2008, 12:13, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 09.07.2008, 12:12 Titel: |
|
|
Mein Fehler
Habe im Gedächtnis gehabt, dass sie erst seit XP existieren, dann jedoch aus der MSDN zitiert, und vergessen es zu ändern. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2008, 12:16 Titel: |
|
|
Hi 28398,
das ist genau das was E-P-S aufgefallen war.
Seit ein paar Wochen werden scheinbar in allen Aktualisierungen der MSDN die alten Win-Versionen nicht mehr erwähnt.
Natürlich funktioniert GlobalMemoryStatus auch in 9X, ME. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 09.07.2008, 17:02 Titel: |
|
|
Vielleicht will Microsoft das gleiche machen wie schon mit MS-DOS, QuickBasic & Co.: Ganz "elegant" unter den Teppich kehren.
Zumindest könnte ich mir das vorstellen.
Aber sehr gut zu wissen, dass GlobalMemoryStatus auch auf Win98 funktioniert.  |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 09.07.2008, 17:55 Titel: |
|
|
Könnte mir eher vorstellen, dass Versionen, die nicht mehr Updates versorgt werden, auch nicht mehr in der MSDN auftauchen. Wozu auch ein Betriebssystem verwenden, das nicht mehr aktuell ist? _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2008, 19:03 Titel: |
|
|
§1 Never change a running system
 _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 09.07.2008, 20:51 Titel: |
|
|
volta hat Folgendes geschrieben: | §1 Never change a running system |
Gilt in der heutigen Zeit jedoch nur noch bedingt! Ständig neu entdeckte Sicherheitslöcher und Schwachstellen in der Software machen ein dauerndes Patches notwendig.
Schön wäre es, wenn ich ein perfekt funktionierendes System nicht mehr anfassen müsste, aber dies dürfte zumindest in absehbarer Zeit noch ein Traum bleiben (ausser man betreibt das System vom Internet und sonstigen äusseren Einflüssen komplett abgeschottet)... _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
E-P-S

Anmeldungsdatum: 16.09.2004 Beiträge: 500 Wohnort: Neuruppin
|
Verfasst am: 09.07.2008, 23:48 Titel: |
|
|
Ich glaube wir weichen langsam vom Thema ab.
Fakt ist das es - speziell meinen gefundenen Funktionsaufruf - auch schon unter Win95 gab und er auch dort so funktionierte. Leider kann man sich nun bei diesen Angaben nicht mehr nur auf die MSDN verlassen sondern muß noch andere Quellen durchforsten - wenn man sich unsicher ist bzw. kein System hat um es einfach zu testen.
Vielen Dank nochmals an alle. _________________ Man kann sich öfter als zweimal im Leben halb tot lachen. |
|
Nach oben |
|
 |
|