Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

MSDN, Funktionen, Windows Versionen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 07.07.2008, 20:40    Titel: MSDN, Funktionen, Windows Versionen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 07.07.2008, 20:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 08.07.2008, 21:21    Titel: Antworten mit Zitat

Hi,
die online MSDN wird wohl laufend 'aktualisiert' mit den Augen rollen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.07.2008, 22:00    Titel: Antworten mit Zitat

Volta hat Folgendes geschrieben:
Ältere Versionen der MSDN kann man noch downloaden.

Wo? Dass es die relativ aktuellen Versionen (seit 2006 oder so) zum Herunterladen bei MS gibt, ist mir bekannt, aber dass auch alte Versionen zu bekommen sind, ist mir neu, würde mich aber sehr freuen. lächeln
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 08.07.2008, 23:32    Titel: Antworten mit Zitat

Wo habe ich den da gesucht?
Ich hatte irgendsowas wie 'MSDN von xx.xx.2000' gesehen?

äähh peinlich

.. finde ich nicht mehr! verlegen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 09.07.2008, 07:11    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 09.07.2008, 08:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 09.07.2008, 10:45    Titel: Antworten mit Zitat

@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, 11:13, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.07.2008, 10:53    Titel: Antworten mit Zitat

csde, du schreibst, die Funktionen gäbe es erst ab Windows XP, zitierst aber, sie seien auch auf Windows 2000 Professional / Server bereits verfügbar...
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 09.07.2008, 11:12    Titel: Antworten mit Zitat

Mein Fehler zwinkern

Habe im Gedächtnis gehabt, dass sie erst seit XP existieren, dann jedoch aus der MSDN zitiert, und vergessen es zu ändern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 09.07.2008, 11:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 09.07.2008, 16:02    Titel: Antworten mit Zitat

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. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 09.07.2008, 16:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1874
Wohnort: D59192

BeitragVerfasst am: 09.07.2008, 18:03    Titel: Antworten mit Zitat

§1 Never change a running system

grinsen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.07.2008, 19:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 09.07.2008, 22:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz