Thema: Delphi objectGUID auslesen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: objectGUID auslesen

  Alt 7. Mär 2012, 13: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;
$2B or not $2B

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