Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Runtime error 216 at 77D18C2C (https://www.delphipraxis.net/17267-runtime-error-216-77d18c2c.html)

Pseudemys Nelsoni 2. Mär 2004 10:01


Runtime error 216 at 77D18C2C
 
hallo,

woher kommt obiger fehler? auf jedenfall wird dieser durch folgendes ausgelöst:

Delphi-Quellcode:
  hFile := CreateFile(PChar(pfad),
           GENERIC_READ or GENERIC_WRITE,
           FILE_SHARE_READ or FILE_SHARE_WRITE,
           nil,
           OPEN_EXISTING,
           0,
           0
  );

    ReadFile(hFile, buf, SizeOf(buf), NumberOfBytesRead, nil);
  MessageBox(0, PChar(string(NumberOfBytesRead)), 'hi', 0);

r_kerber 2. Mär 2004 10:12

Re: Runtime error 216 at 77D18C2C
 
Ist buf in der erforderlichen Größe bereitgestellt??

teebee 2. Mär 2004 10:12

Re: Runtime error 216 at 77D18C2C
 
Ein Runtime Error 216 ist eine Zugriffsverletzung. Hast u für Deinen Buffer genug Speicher reserviert?

Gruß, teebee

Pseudemys Nelsoni 2. Mär 2004 10:45

Re: Runtime error 216 at 77D18C2C
 
hallo,

der buffer sah so aus:

Delphi-Quellcode:
buf: Array[0..4095] of Char;

aber selbst wenn ich " buf: Array[0..1000000000] of Char;" nehme (was ziemlich lagt :D) kommt der fehler..

r_kerber 2. Mär 2004 10:56

Re: Runtime error 216 at 77D18C2C
 
Hast Du schon mal überprüft, ob handle <> NIL ist? Vielleicht solltest Du auch noch ein Typecast auf die Winapi32-Typen machen.

Pseudemys Nelsoni 2. Mär 2004 11:13

Re: Runtime error 216 at 77D18C2C
 
Code:
  if (hFile <> 0) then messagebox(0, 'hi', 'hi', 0);

die message wird ausgegeben, also existiert das handle.

was meinst du mit api typen?

r_kerber 2. Mär 2004 11:18

Re: Runtime error 216 at 77D18C2C
 
[equote="In den MS Win32 Developer's References steht geschrieben"]HANDLE CreateFile(

LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);[/equote]

APP 2. Mär 2004 11:24

Re: Runtime error 216 at 77D18C2C
 
Hallo Pseudemys Nelsoni,

CreateFile gibt bei einem fehlerhaften Handle
Zitat:

INVALID_HANDLE_VALUE = DWORD(-1);
zurück, daher mußt Du auf

Delphi-Quellcode:
  IF hFile = INVALID_HANDLE_VALUE THEN
  // Fehler
oder auf -1 und nicht auf 0 prüfen.

Pseudemys Nelsoni 2. Mär 2004 11:28

Re: Runtime error 216 at 77D18C2C
 
und wie zeig ich das als string an r_kerber?

btw:

Delphi-Quellcode:
if (hFile <> INVALID_HANDLE_VALUE) then messagebox(0, 'hi', 'hi', 0);
´


zeigt ebenfalls die messagebox

will nur solch nen doofen string in einer dll ersetzen, man ist das schwer

APP 2. Mär 2004 11:48

Re: Runtime error 216 at 77D18C2C
 
Zitat:

Zitat von Pseudemys Nelsoni
...und wie zeig ich das als string an r_kerber?

Luckie hat Dir hier http://www.delphipraxis.net/internal...light=readfile schon die Antwort gegeben.
Stichwort: NumberOfBytesRead (=Gelesen von Luckie) ist vom Typ ...)

Pseudemys Nelsoni 2. Mär 2004 12:01

Re: Runtime error 216 at 77D18C2C
 
Moin,

das geht aber nicht, ich weiss ja nicht ob luckie da nen fehler hatte, aber "Gefunden" ist vom typ Cardinal und die funktion "ReadFile" gibt einen Boolean zurück

Luckie 2. Mär 2004 12:03

Re: Runtime error 216 at 77D18C2C
 
Richtig, war ein kleiner fehler:
Delphi-Quellcode:
var
  Gelesen: Cardinal;
begin
  while Gelesen = 1024 do
  begin
    ReadFile(..., ..., 1024, Gelesen, nil)
    // mach was mit den Bytes
  end;

APP 2. Mär 2004 12:04

Re: Runtime error 216 at 77D18C2C
 
Hallo,
ich dachte eher an
Zitat:

Zitat von Pseudemys Nelsoni
Code:
  MessageBox(0, PChar([color=red]IntToStr[/color](NumberOfBytesRead)), 'hi', 0);

da NumberOfBytesRead vom Typ Cardinal ist.

Pseudemys Nelsoni 2. Mär 2004 12:10

Re: Runtime error 216 at 77D18C2C
 
hallo luckie,

würdest du mir die schleife bzw den ganzen part des codes erklären?
ich verstehe nicht wie die schleife je ausgeführt wird, weil sie ja irgendwie nie "true" wird oder? ich meine am anfang hat die variable ja nicht den wert 1024.

@APP: ich mache das (leider) ohne die VCL, da es ein patch wird (der nur ein string aus einer dll ersetzt) und den wollt ich nicht gerade 500kb gross werden lassen *g*

also IntToStr gibt es nicht

APP 2. Mär 2004 12:18

Re: Runtime error 216 at 77D18C2C
 
Hallo,

tja, das mit NonVCL hast Du mir vergessen zu sagen :( ,
dann musst Du Dir etwas Einfallen lassen, denn dieser
Cast verursacht Deine Fehlermeldung
(da "NumberOfBytesRead" ja vom Typ Cardinal ist):

Delphi-Quellcode:
VAR
  NumberOfBytesRead                               : Cardinal;
BEGIN
  NumberOfBytesRead := 1;
  MessageBox(0, PChar(STRING(NumberOfBytesRead)), 'hi', 0); //Crash
END;

Pseudemys Nelsoni 2. Mär 2004 12:22

Re: Runtime error 216 at 77D18C2C
 
hm, ich kenn keine möglichkeit einen integer in einen string umzuwandeln

Luckie 2. Mär 2004 12:23

Re: Runtime error 216 at 77D18C2C
 
Lad dir meine Toolbox runter, da ist alles drin.

Pseudemys Nelsoni 2. Mär 2004 13:02

Re: Runtime error 216 at 77D18C2C
 
ah danke, mit Str gehts :mrgreen:


eine frage nebenbei(für sowas möcht ich kein thema aufmachen), was ist das:

Delphi-Quellcode:
function FloatToStr(Value: Extended; Width, Decimals: Integer): string;
begin
  Str(Value:Width:Decimals, result);
end;
wofür stehen die ":" ? hab ich u.a mit bei der toolbox gefunden

Luckie 2. Mär 2004 13:04

Re: Runtime error 216 at 77D18C2C
 
Ich kann auch nur Befehle, Funktionen und Proceduren verwenden, die mir Delphi anbietet. Und die Hilfe dazu findet man in der Regel... Na? Wo? ... ;)

Mit Str mag es wohl gehen, aber wie wäre es mit IntToStr ais der Toolbox? :roll:

Pseudemys Nelsoni 2. Mär 2004 13:26

Re: Runtime error 216 at 77D18C2C
 
ah

Zitat:

Delphi-Syntax:

procedure Str(X [: Width [: Decimals ]]; var S);

jo die funktion IntToStr benutz ich dann, danke =]

pistazie 26. Mai 2004 08:18

Re: Runtime error 216 at 77D18C2C
 
Also ich habe so ein ähnliches Problem. Wenn ich die exe meines Programmes starten will, kommt bei mir die Meldung: runtime error 1 at 00001E7E

Ich weiß auch nicht wieso, wo die Ursache liegen könnte und wie ich das beheben muss...

Kann mir jemand weiterhelfen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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