![]() |
Versions Nummer parsen
Wieder ICH ;)
In Delphi gebe ich die Version Nummer auf diese weise zurück
Delphi-Quellcode:
const
// constant for DLL Version number Ver_Major_Hi: byte = 0; Ver_Major_Lo: byte = 2; Ver_Minor_Hi: byte = 1; Ver_Minor_Lo: byte = 0;
Delphi-Quellcode:
Wie kann ich jetzt in C++ den LONG wert wieder zurück in einem WCHAR bringen ? (1.0.0.0 als Beispiel)
function KVideo_GetVersion: longint; stdcall;
begin result := Ver_Major_Hi * $1000000 + Ver_Major_Lo * $10000 + Ver_Minor_Hi * $100 + Ver_Minor_Lo; end;
Code:
gruss
LONG KVIDEOPLAYERDEF(KVideo_GetVersion)();
|
AW: Versions Nummer parsen
Ich würde dir hier empfehlen schon in deiner DLL auf die arithmetischen Operationen zu verzichten und deine Versionsnummer stattdessen so zusammenzusetzen (davon ausgehend, dass die einzelnen Nummern jeweils Bytes - genauer gesagt unsigned 8-bit ints sind):
Delphi-Quellcode:
Result := (Ver_Major_Hi shl 24) or (Ver_Major_Lo shl 16) or (Ver_Minor_Hi shl 8) or Ver_Minor_Lo;
Dann kannst du die Rückrechnung nämlich einfach analog mit right-shifts vornehmen:
Delphi-Quellcode:
oder in C:
Ver_Major_Hi := (Version shr 24) and $FF;
Ver_Major_Lo := (Version shr 16) and $FF; Ver_Minor_Hi := (Version shr 8) and $FF; Ver_Minor_Lo := Version and $FF;
Delphi-Quellcode:
Deine jetzige Version macht - vor allem mit der hexadezimalen Multiplikation - nicht allzu viel Sinn. Wenn du die Faktoren in Dezimalform bringst, würde es funktionieren. Dann müsstest du allerdings mit
Ver_Major_Hi = (Version >> 24) & 0xFF;
Ver_Major_Lo = (Version >> 16) & 0xFF; Ver_Minor_Hi = (Version >> 8) & 0xFF; Ver_Minor_Lo = Version & 0xFF;
Delphi-Quellcode:
und
div
Delphi-Quellcode:
zurückrechnen, was ich persönlich weniger elegant finde.
mod
|
AW: Versions Nummer parsen
Zitat:
Werde es ändern Danke dir. EDIT: So geht's
Code:
gruss
LONG KVideoPlayerVersion = KVideo_GetVersion();
WCHAR Version[MAX_PATH] = { 0 }; _snwprintf_s(Version, MAX_PATH, 259, L"%i.%i.%i.%i", (KVideoPlayerVersion >> 24) & 0xFF, (KVideoPlayerVersion >> 16) & 0xFF, (KVideoPlayerVersion >> 8) & 0xFF, KVideoPlayerVersion & 0xFF); |
AW: Versions Nummer parsen
Nur der Klugscheißerei wegen ;)
Das hier:
Delphi-Quellcode:
Lässt sich wie folgt umkehren:
function KVideo_GetVersion: longint; stdcall;
begin result := Ver_Major_Hi * $1000000 + Ver_Major_Lo * $10000 + Ver_Minor_Hi * $100 + Ver_Minor_Lo; end;
Delphi-Quellcode:
procedure ParseVersion(const Version: LongInt; out Major_Hi: Integer; out Major_Lo: Integer; out Minor_Hi: Integer; out Minor_Lo: Integer);
begin Minor_Lo := Version mod $100; Minor_Hi := (Version mod $10000) div $100; Major_Lo := (Version mod $1000000) div $10000; Major_Hi := Version div $1000000; end; |
AW: Versions Nummer parsen
Jo ;) div 4
Ist aber nicht der normale Standard. Denke die meisten arbeiten mit Shl.. von daher war das schnell geändert. gruss |
AW: Versions Nummer parsen
Warum die ganzen mathematischen Funktionen, wenn man ein Record nehmen kann, welcher zwei Entsprechungen hat (Long und die vier Bytes)?
Code:
const
// constant for DLL Version number Ver_Major_Hi: byte = 1; Ver_Major_Lo: byte = 2; Ver_Minor_Hi: byte = 3; Ver_Minor_Lo: byte = 4; type RVersion = record case boolean of true: (Version: LONG); false: (Ver_Minor_Lo: byte; Ver_Minor_Hi: byte; Ver_Major_Lo: byte; Ver_Major_Hi: byte) end; procedure TForm2.FormCreate(Sender: TObject); var x: RVersion; begin x.Ver_Major_Hi:=Ver_Major_Hi; x.Ver_Major_Lo:=Ver_Major_Lo; x.Ver_Minor_Hi:=Ver_Minor_Hi; x.Ver_Minor_Lo:=Ver_Minor_Lo; Caption:=IntToHex(x.Version, 8); end; |
AW: Versions Nummer parsen
Zitat:
Und deshalb extra einen Record? gruss |
AW: Versions Nummer parsen
Zitat:
In Anlenung an die bekannte Versions-Ressource des Windows, könnte man sich auch überlegen das mit 2x DWORD aka UInt64 / 4x WORD umzusetzen, also mit Word statt Byte pro Nummer. Zitat:
|
AW: Versions Nummer parsen
Ach.. Ich kann mein Brot auch mit einem Löffel streichen letztendlich zählt nur das die Butter auf dem Brot ist.
Man kann das ganze auch bis zum exzess treiben. gruss |
AW: Versions Nummer parsen
Man kann auch einfach eine fortlaufende Nummer als Version verwenden, dann braucht man nur ein Integer :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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