Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Frage zu CreateFile (https://www.delphipraxis.net/17096-frage-zu-createfile.html)

Pseudemys Nelsoni 28. Feb 2004 07:50


Frage zu CreateFile
 
Moin,

habe aus einem Thread folgenden Code:

Delphi-Quellcode:
Result.Handle := CreateFile(PChar('\\.\' + DriveLetter + ':'),
                       GENERIC_READ or GENERIC_WRITE,
                       FILE_SHARE_READ or FILE_SHARE_WRITE,
                       nil,
                       OPEN_EXISTING,
                       0,
                       0);
was heisst "GENERIC_READ or GENERIC_WRITE" (ich weiss schon wozu es ist, aber wieso OR und nicht AND?)?

lesen oder schreiben? muss das nicht lesen und schreiben heissen?

Sharky 28. Feb 2004 07:55

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

Luckie 28. Feb 2004 07:56

Re: Frage zu CreateFile
 
Es handelt sich um eine bitweise Verknüpfung:
Code:
001 = lesen
010 = schreiben
--------------- or
011 = lesen und schreiben
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.

Code:
011 = lesen und schreiben
010 = schreiben
-------------------------- and
010 = schreiben
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. ;)

Pseudemys Nelsoni 28. Feb 2004 07:58

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

Luckie 28. Feb 2004 07:59

Re: Frage zu CreateFile
 
F5 ;)

Pseudemys Nelsoni 28. Feb 2004 08:01

Re: Frage zu CreateFile
 
Danke, ich glaub ich verstehe es doch :)

Sharky 28. Feb 2004 08:03

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;

Pseudemys Nelsoni 28. Feb 2004 08:06

Re: Frage zu CreateFile
 
ich dachte mit OR kann man nur boolesche ausdrücke überprüfen *g*, sowas wie i > 3 usw

thx nochmal

Luckie 28. Feb 2004 08:07

Re: Frage zu CreateFile
 
Habe auch noch was ergänzt (das fett gedruckte), eventuell wird es dann klarer.

Luckie 28. Feb 2004 08:13

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 16:58 Uhr.
Seite 1 von 2  1 2      

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