AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

objectGUID auslesen

Offene Frage von "himitsu"
Ein Thema von cst_07 · begonnen am 2. Mär 2009 · letzter Beitrag vom 7. Mär 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.371 Beiträge
 
Delphi 12 Athens
 
#1

AW: objectGUID auslesen

  Alt 7. Mär 2012, 12:45
Sicher ist das schon.

Man hätte auch über AsAnsiString gehn können, die AnsiChar nach Byte, oder gleich alles zusammen nach TGUID gecastet,
aber da könnte es Probleme geben, wenn in der GUID auch nur ein byte auf 0 steht, wegen der PChar #0.

Zusätzlich hätte man danach noch über GUIDToString umgewandelt, wenn man die Textausgabe benötigt.


Wenn du die die Begrenzung vorher prüfst, dnan könntest du sie in der Schleife aös gegeben hinnehmen und müsßtest sie nicht unbeding nochmals abfragen.
Aber VarArrayLowBound sollte man sicherheitshalber noch mit prüfen.
Delphi-Quellcode:
function VariantGUIDToStr(VarGUID: Variant): String;
var
  I: Integer;
  ByteGUID: array[0..15] of byte;
begin
  result := '';
  if VarIsArray(VarGUID) and (VarArrayLowBound(VarGUID,1) = 0) and (VarArrayHighBound(VarGUID,1) = 15) then
  begin
    for I := 0 to 15 do
      ByteGuid[I] := VarGUID[I];
    result := GUIDToString(TGUID(ByteGUID));
  end;
end;
Oder du prüfst die Größe des Arrays, wobei es hier egal ist, wie die Low-Grenze aussieht. (z.B. 0-15 oder 1-16)
Delphi-Quellcode:
function VariantGUIDToStr(VarGUID: Variant): String;
var
  I: Integer;
  ByteGUID: array[0..15] of byte;
begin
  result := '';
  if VarIsArray(VarGUID) and (VarArrayHighBound(VarGUID,1) - VarArrayLowBound(VarGUID,1) + 1 = 16) then
  begin
    for I := VarArrayLowBound(VarGUID,1) to VarArrayHighBound(VarGUID,1) do
      ByteGuid[I - VarArrayLowBound(VarGUID,1)] := VarGUID[I];
    result := GUIDToString(TGUID(ByteGUID));
  end;
end;
Eventuell geht auch sowas?
Delphi-Quellcode:
function VariantGUIDToStr(VarGUID: Variant): String;
begin
  if VarIsArray(VarGUID) and (VarType(VarGUID) = varArray or varByte) and (VarArrayDimCount(VarGUID) = 1)
      and (VarArrayHighBound(VarGUID,1) - VarArrayLowBound(VarGUID,1) + 1 = 16) then begin
    Result := GUIDToString(PGUID(VarArrayLock(VarGUID))^);
    VarArrayUnlock(VarGUID);
  end else
    Result := '';
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Mär 2012 um 12:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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