AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
Thema durchsuchen
Ansicht
Themen-Optionen

ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

Ein Thema von EConvertError · begonnen am 2. Feb 2008 · letzter Beitrag vom 10. Feb 2008
Antwort Antwort
Seite 2 von 2     12   
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#11

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 2. Feb 2008, 21:16
Zitat von DGL-luke:
PS: const bedeutet pass-by-reference, genauso wie var und out. und es gibt bei diesen drei schlüsselwörtern in delphi keinen unterschied außer der sie repräsentierenden zeichenfolge.
EDIT: Und der Compiler weigert sich, die neuzuweisung eines const-params zu übersetzen. naja.
Dein Edit ist ja der Unterschied. Der Delphi Compiler macht den Unterschied zwischen den Aufrufkonventionen.

Aber dass Windows.pas hier einfach ein Datentypentyp, statt einem Zeiger auf den Datentyp verwendet finde ich schon sehr falsch. Es mag zwar funktionieren, jedoch nicht in allen Fällen, wie man sieht.

Ich sehe grad übrigens, dass TPipeInstance falsch übersetzt ist. Die Arrays müssen strenggenommen von 0 bis BUFSIZE-1 gehen.



Zitat von EConvertError:
Ja, doch so im Großen und Ganzen verstehe ich doch sehr gut, was die da tun.
Ich meine nicht, was du tust, sondern was das Beispiel micht. Ehrlich gesagt, musste ich auch erst ein paar mal lesen, um es zu verstehen.
Die erweitern den record TOverlaped, indem sie ihn als LPPIPEINST neu deklarieren. Das macht man indem man einfach den vorhanden Record an die erste Stelle im neuen Record setzt. Das ist (fast) so, als ob man einfach die Inhalte des Overlapped records in den neuen an den Anfang kopiert. Jede Funktion, die ein Zeiger auf ein Overlapped-Record erwartet, arbeitet dann mit dieser struktur fein. Den Rest im Record verwenden die Callbackfunktionen für eigene Zwecke.


Die Nullen jedes zweite Byte deuten scharf auf Unicode hin. Du musst es natürlich der Gegenseite gerecht machen und dies erkennen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#12

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 2. Feb 2008, 21:34
Zitat:
Aber dass Windows.pas hier einfach ein Datentypentyp, statt einem Zeiger auf den Datentyp verwendet finde ich schon sehr falsch.
Vor allem machen es die Codegearler nur bei einer von den beiden Funktionen.

Zitat:
Ich sehe grad übrigens, dass TPipeInstance falsch übersetzt ist. Die Arrays müssen strenggenommen von 0 bis BUFSIZE-1 gehen.
Von 1 bis BUFSIZE ist nicht in Ordnung?

Ähm...nein, dass die den Record so erweitern ist mir nicht so wirklich aufgefallen.
Ich habe einfach meinen eigenen Record genommen und es scheint zu funktionieren. Wobei ich mir dann die Frage stelle: Hat das nur zufällig funktioniert?
Hat es etwa nur funktioniert, weil das TOverlapped an erster Stelle steht im Record? Soll heißen, ich kann keinen Pointer auf ein Objekt übergeben und mein eigenes TNamedPipeClient-Objekt verwenden?

Die Antwort habe ich schon richtig hinbekommen. *freu* Ich werde jetzt allerdings sicher nicht allzu viel Energie hineinstecken, da mir sowieso eine eigene TStream-Klasse (TNamedPipeStream oder so 8) ) für die Kommunikation vorschwebt. Dann kann man alles was das Herz begehrt hin und herjagen.

Anderas
Andreas N.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#13

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 2. Feb 2008, 23:34
Die Arraygrenzen sind hier weniger von bedeutung, da sie wohl garnicht genutzt werden. Aber in C fangen Arrays immer mit 0 an.

Die Recorderweiterung ist manchmal doch nützlich in C. Ist so ähnlich wie bei Vererbung. Aber nur entfernt
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 9. Feb 2008, 19:41
nja, CONST ist eigentlich kein Problem (selbst bei In/Out-Vars), denn schließlich wird hier ja nur der Recordinhalt geändert und nicht der Speicherplatz dieser Variable.


PS: leider hat Delphi zu oft derartige Definitionsprobleme

falsche Parametertypen (Vorzugsweise falsche ANSI-Parameter in Unicode-Funktionen)
oder eben VAR/CONST statt POINTER.

Code:
function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;
  [color=#ff0000]var lpNumberOfBytesRead: DWORD;[/color] lpOverlapped: POverlapped): BOOL; stdcall;
versucht hier mal ein NIL (also nichts) als lpNumberOfBytesRead zu verwenden


die einfachste Lösung ist da natürlich gleich auf externe Header/Definitionen zurückzugreifen (z.B. JEDI) ... außerdem bekommt man so auch "neuerer" Definitionen, welche in Delphi noch immer nicht eingeflossen sind.
$2B or not $2B
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#15

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 9. Feb 2008, 19:54
Ich kann einfach nur JEDI API Lib empfehlen.
Und wenn Ihr ein Fehler findet, so setzt euch mit den Entwicklern oder mir in Kontakt. Wir sind immer glücklich, wenn Fehler gefunden werden.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#16

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 10. Feb 2008, 16:37
Natürlich verwende ich die JEDI API Lib für größere Dinge (btw: großes Lob dafür). Aber zwei Funktionen kann man sich auch selbst mal einbinden.

Die ganze Geschichte funktioniert bereits, ich muss allerdings noch testen, ob man anstatt des Records auch eine Klasse verwenden kann. Ich werde euch da Bescheid geben (kann allerdings eine Weile dauern, weil ich immer im Stress bin ).

Danke,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#17

Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?

  Alt 10. Feb 2008, 22:53
Eine Klasse wirst du wohl Streamen müssen.

Ich verwende ausschließlich JwaWindows als Unit. Einfacher gehts nimmer. Okay man darf dann nicht auf die EXE-Größe achten. Aber selbst dann kann man die JEDI Units noch einzeln verwenden.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:12 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