... ich hol den Thread noch mal hoch ...
Betreff der Diskussionen zur Notwendigkeit (& Richtigkeit) einer Versionsprüfung gebe ich aus meiner Sicht z.B. die "WLAN-
API" mal zu Bedenken.
Konkret an dem Beispiel:
Statt immer zu prüfen, welche Windowsversion vorliegt, kann ja auch stattdessen auf die Funktionalität prüfen.
Also ob die
DLL vorhanden ist, die die gesuchten Funktion enthält und dann per dynamischen Laden nachsehen, ob ich einen Zeiger auf die Funktion bekomme.
Oder - so kenne ich das von
DirectX - man prüft über QueryInterface (oder Supports), ob die Instanz eines Betriebssystemsinterfaces, welches ich von einer Basisfunktion bekommen habe, weitere, neue Interfaces implementiert.
Beispiel: In Windows 98 wurde das Interface IFoo eingeführt. Dieses kommt aus der \Windows\System32\Foo.dll von der GetFooInstance()-Funktion.
Unter Windows Vista gab es neue Funktionalität. IFoo wurde abgeleitet und heißt jetzt IFoo2 = interface(IFoo).
Mit Windows 7 kam IFoo3, mit Windows 8 IFoo4 usw.
So kann ich dann beim Programmieren prüfen:
Delphi-Quellcode:
var
HR: HRESULT;
Foo: IFoo;
Foo2: IFoo2;
Foo3: IFoo3;
Foo4: IFoo4;
Foo5: IFoo5;
begin
HR := GetFooInstance(Foo);
if Succeded(HR) then
begin
if Supports(Foo, IFoo2, Foo2) then
Bar2(Foo2);
if Supports(Foo, IFoo3, Foo3) then
Bar3(Foo3);
if Supports(Foo, IFoo4, Foo4) then
Bar4(Foo4);
if Supports(Foo, IFoo5, Foo5) then
Bar5(Foo5);
end;