Delphi-Version: 5
Bool(ean)-Wert in PByte kopieren [gelöst]
Hallo Leser und Wissende :).
Ich hab mal wieder ein kleines Problem, das ich aufgrund fehlenden Wissens, Verständnisschwierigkeiten und mangelnder Suchergebnisse nicht selbst lösen kann. Gegeben ist eine Funktion
Delphi-Quellcode:
Im Parameter FieldValue können verschiedene Typen zurückgegeben werden: Strings, Boolsche Typen, Numerische Typen, Datumsangaben usw. Strings sind ja kein Problem, denn PChar und PByte kann man hier einfach "einander zuweisen", Beispiel:
function FsContentGetValue(FileName: PChar; FieldIndex, UnitIndex: integer;
FieldValue: PByte; maxlen, flags: integer):integer; stdcall;
Delphi-Quellcode:
lstrcpyn(PChar(FieldValue), PChar(svc.ServiceName), maxlen);
Aber wie kann ich einen Boolschen Wert zuweisen/kopieren? Ich hab verschiedene Varianten probiert, unter anderem:
Delphi-Quellcode:
Leider kommt dabei immer FieldValue = True raus.
PBOOL(FieldValue):= PBOOL(LongBool(svc.OwnProcess));
PBOOL(FieldValue):= PBOOL(svc.OwnProcess); In C++ würde man einfach schreiben:
Code:
Kann mir jemand auf die Sprünge helfen?
*((BOOL*)FieldValue) = (svc->Interactive);
MfG Dalai |
AW: Bool(ean)-Wert in PByte kopieren
Willst du dem Zeiger, oder dem Inhalt was zuweisen?
Delphi-Quellcode:
, also das nächste Mal nicht das "*" vergessen. :zwinker:
PBOOL(FieldValue)^ := ...
Ob und wer vorher noch den Speicher reserviert, ist eine andere Sache. |
AW: Bool(ean)-Wert in PByte kopieren
Edit: Hab das falsch verstanden. Ich dachte du nutzt die genannte Funktion, aber du schreibst sie ja :stupid:
|
AW: Bool(ean)-Wert in PByte kopieren
Zitat:
Also im Grunde machst du eine 1:1 zuweisen. Der Pointer FieldValue erhält bei diesen zwei Zeilen keine Adresse sondern einen Wert! Bei LongBool kann das alles zwischen 0 und 2^32-1 sein! Wenn du dann FieldValue dereferenzierst, per ^, dann greifst du auf die Adresse, welche der Inhalt von OwnProcess war, zu - was eig. knallen sollte, da da meistens 0 oder 1 drinnen steht und du keinen Zugriff auf diese Adressen haben solltest. So ists richtig:
Delphi-Quellcode:
// Zuweisung als Pointer
FieldValue := @svc.OwnProcess)); // Änderung der originalen Referenz FieldValue^ := false; // svc.OwnProcess = false! |
AW: Bool(ean)-Wert in PByte kopieren
Zitat:
Zitat:
Zitat:
Zitat:
MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz