![]() |
Re: Type _OSVERSIONINFOA - Verständnisproblem
Zitat:
Dort gibt es auch Ansi und Wide-Versionen. Jedoch ist die Ansi-Codepage (wie auch auf chinesischen Windows) so das mehrere Ansi-Characters ein Zeichen darstellen! Damit funktioniert jeder Code nicht mehr korrekt der hart Strings abschneidet oder einzelne Characters aus Strings ändert. Ein String der z.B. 30 1-Byte-Characters beinhaltet ist letztendlich nur 10 (Wide-)Characters lang. |
Re: Type _OSVERSIONINFOA - Verständnisproblem
Vielleicht meinte OldGrumpy ja, dass ein japanisches Kompilat die Wideversionen verwenden würde.
|
Re: Type _OSVERSIONINFOA - Verständnisproblem
@DGL-luke: Ja, letzteres :) Je nach Compilerumgebung kann der "normale" API-Name entweder auf die A(nsi)- oder W(ide)-Variante gemappt sein. Bin heute irgendwie nicht ganz bei der Sache :(
Edit (2x): Eigen-DAU korrigiert ;) |
Re: Type _OSVERSIONINFOA - Verständnisproblem
Zitat:
|
Re: Type _OSVERSIONINFOA - Verständnisproblem
@OldGrumpy, hast du dich hiermit
Zitat:
|
Re: Type _OSVERSIONINFOA - Verständnisproblem
Nein, meine Antwort da bezog sich auf DGL-luke, aber generell würde ich dazu tendieren, die W-Apis zu nehmen. Auf Kernelebene ist der Umstieg schon länger komplett vollzogen, insofern werden die Ansi-Apis praktisch nur noch der Kompatibilität wegen mitgeführt.
Edit: Eigen-DAU korrigiert (*sigh*) |
Re: Type _OSVERSIONINFOA - Verständnisproblem
Ich dementiere heftigst: Ich bin nicht Luckie!
|
Re: Type _OSVERSIONINFOA - Verständnisproblem
ARGH! *schäm* :wall: :wall: :wall:
Ich editiere da oben jetzt nochmal alles :) Mea culpa :( |
Re: Type _OSVERSIONINFOA - Verständnisproblem
So ganz klar ist die Sache für mich aber immer noch nicht, da ich nicht so oft die API verwende bzw. ich mich noch nicht so intensiv beschäftigt habe. Wenn ich eine Funktion zum ermitteln der Windowsversion schreibe, würde die Deklaration des Typen so aussehen, wenn ich die windows.pas nutzte:
Delphi-Quellcode:
Das würde doch der Ansi-Variante entsprechen ebenso der Aufruf der Funktion GetVersionEx.
function GetWinVer : string;
var OSVersionInfo : TOSVersionInfo; begin ZeroMemory(@OSVersionInfo, SizeOf(TOSVersionInfo)); OSVersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); if GetVersionEx(OSVersionInfo) then begin end; end; Wenn ich das ganze kompiliere, verarbeite ich doch nur die Ansi-Variante. Demnach müsste das entstande Programm Probleme mit sich bringen, da der Typ _OSVERSIONINFOA verarbeitet und die API Funktion GetVersionExA gebraucht wird aber bei einem Rechner mit nur noch Wide-Version nicht vorhanden ist? Wenn ich die Funktion und den Typ selber in die Unit aufnehme, kann ich die Wide-Version verwenden aber eben nicht wenn ich die Windows.pas einbinde. |
Re: Type _OSVERSIONINFOA - Verständnisproblem
Bisher ist es bei Windows immer so, dass noch ewig lange diverse Rattenschwänze mitgeschleppt werden, um Abwärtskompatibilität zu sichern. (In Delphi gibts z.B. auch immer noch WinExec(), ein Überbleibsel aus Zeiten von Windows 3.x) Wenn 2011 wirklich der Vista-Nachfolger in den Startlöchern steht, womöglich mit .NET 4.0 *g* dann würde ich mich langsam aber nicht mehr darauf verlassen. Wer rechtzeitig umsteigt, hat weniger Probleme - sehr schön sehen konnte man das an der Treibersituation für 64-Bit-Systeme. XP x64 und auch Vista x64 quälen einen immer noch recht derbe durch nicht verfügbare Treiber für allerlei Hardware. Bei den Treibern bleibt den Herstellern nämlich gar nichts anderes übrig, als sich an den neuen Features zu orientieren, die 64-Bit-Varianten brauchen bei Kerneltreibern auch native 64-Bit-Treiber. Und obwohl Vista schon ewig lange für Entwickler verfügbar war, scheinen etliche Hersteller doch wohl TOTAL überrascht worden zu sein, dass Vista jetzt auf einmal in den Läden steht. Hoppla!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz