![]() |
Frage zu CreateFile
Moin,
habe aus einem Thread folgenden Code:
Delphi-Quellcode:
was heisst "GENERIC_READ or GENERIC_WRITE" (ich weiss schon wozu es ist, aber wieso OR und nicht AND?)?
Result.Handle := CreateFile(PChar('\\.\' + DriveLetter + ':'),
GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); lesen oder schreiben? muss das nicht lesen und schreiben heissen? |
Re: Frage zu CreateFile
Hai Pseudemys,
die Constanten Generic_Read und Generic_Write sind nichts anderes als zwei Integer zahlen. Als Parameter erwartet CreateFile einen Integer. In diesem ist dann über die einzelnen Bits der zugriff gesteuert. Wenn Du zwei Zahlen Binär verbinden möchtest musst Du dies mit Or machen. z.b: GENERIC_READ = 1 = 00000001 GENERIC_WRITE = 2; 00000010; Wenn du diese mit AND Verknüpfst kommt 0 raus. Aber Du möchtest ja das sowohl Bit 0 als auch Bit 1 gesetzt werden.
Code:
00000001
OR 00000010 -------- 00000011 |
Re: Frage zu CreateFile
Es handelt sich um eine bitweise Verknüpfung:
Code:
Bei and würde rauskommen: 000 und was soll das bedeuten? Mit einer Bitweisen or Verknüpfung kann ich also Werte mit einander kombinieren und kann sie wieder zerlegen um zu kucken, welche Werte enthalten sind.
001 = lesen
010 = schreiben --------------- or 011 = lesen und schreiben
Code:
Ich maskiere also das Bit, was ich abfragen will mit einem Wert den ich abfragen will und wenn genau der Wert rauskommt, weiß ich, dass er enthalten ist. Das ist der Trick an der ganzen Geschichte dabei. ;)
011 = lesen und schreiben
010 = schreiben -------------------------- and 010 = schreiben |
Re: Frage zu CreateFile
Hallo sharky, danke für diew erklärung....auch wenn ich es nicht so ganz verstehe, für mich heisst OR = ODER, komisch alles :o
EDIT: Luckies lesen |
Re: Frage zu CreateFile
F5 ;)
|
Re: Frage zu CreateFile
Danke, ich glaub ich verstehe es doch :)
|
Re: Frage zu CreateFile
In diesem Fall ist es aber eine Binäre operation. Diese darfst Du nicht mit einer logischen Abfrage, in z.B. einer IF-Abfrage, vergleichen.
Delphi-Quellcode:
var
a,b : Integer; begin a := 1; b := 2; if (a = 1) OR (b=2) then // WAHR a ist 1 und b ist 2 begin end; if (a or b) = 1 then //Falsch a or b = 3. Das ist ein Bitoperation. begin end; if (a or b) = 3 then // WAHR begin end; end; |
Re: Frage zu CreateFile
ich dachte mit OR kann man nur boolesche ausdrücke überprüfen *g*, sowas wie i > 3 usw
thx nochmal |
Re: Frage zu CreateFile
Habe auch noch was ergänzt (das fett gedruckte), eventuell wird es dann klarer.
|
Re: Frage zu CreateFile
F5, er hat es wohl nicht mitbekommen. Deswegen hole ich es für ihn noch mal anch oben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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