![]() |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
Zitat:
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:
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. |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
Zitat:
Zitat:
Ähm...nein, dass die den Record so erweitern ist mir nicht so wirklich aufgefallen. ;-) :oops: 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. :mrgreen: Anderas |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
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 :D |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
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 :cry: falsche Parametertypen (Vorzugsweise falsche ANSI-Parameter in Unicode-Funktionen) oder eben VAR/CONST statt POINTER.
Code:
versucht hier mal ein NIL (also nichts) als lpNumberOfBytesRead zu verwenden :wall:
function ReadFile(hFile: THandle; var Buffer; nNumberOfBytesToRead: DWORD;
[color=#ff0000]var lpNumberOfBytesRead: DWORD;[/color] lpOverlapped: POverlapped): BOOL; stdcall; 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. |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
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. |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
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 |
Re: ReadFileEx/WriteFileEx verwenden: Fehler in Windows.pas?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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