Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Dez 22, 2024 13:33

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Mai 30, 2016 08:31 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Warum bekomm ich bei BlockRead nen EA 998 Fehler, wenn ich keinen Index zu dem PByte Target angebe?
PByte zeigt doch auf den ersten Eintrag im Speicher oder irr ich mich? Daher ist es doch irrelevant ob ich [0] dazuschreibe oder nicht???
Eindeutig zu lange her das ich Delphi programmiert habe...

Code:
  1.  
  2. procedure LoadFileContent(filename: String; sizeOfFile : Int64; var content : PFileContent);
  3. var
  4.   F: File;
  5. begin
  6.   content^.Size := sizeOfFile;
  7.   content^.Data := AllocMem(content^.Size);
  8.   AssignFile(F, filename);
  9.   try
  10.     Reset(F, 1);
  11.     // Warum funktioniert nur content^.Data[0] und nicht content^.Data (EA 998 Fehler)
  12.     BlockRead(F, content^.Data[0], content^.Size);
  13.   finally
  14.     CloseFile(F);
  15.   end;
  16. end;
  17.  


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Mai 30, 2016 08:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das zweite Argument an BlockRead ist "var". Das ist so ähnlich wie in C++ ein Referenzargument ("char &foo"): es wird implizit ein Pointer auf das übergeben, was man reinreicht.

Das heißt, wenn du in das Argument ein PByte reingibst, wird tatsächlich ein Pointer auf deine PByte-Variable übergeben. Deshalb funktioniert es, wenn du Data[0] schreibst. Dann wird intern @Data[0] übergeben, was ja genau das ist, was du willst.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mai 31, 2016 20:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Code:
  1. BlockRead(F, content^.Data[0], content^.Size);

Aber wehe, die Array Data ist = 0, dann gibt es einen Laufzeitfehler.

Entweder Länge vor dem schreiben überprüfen, oder mit einem Pointer.

Genau so ein Fehler hatte ich hier auch:
Code:
  1. //    glBufferData(GL_ARRAY_BUFFER, SizeOf(GLfloat) * Length(GLfloatArray), @GLfloatArray[0], GL_STATIC_DRAW);  // Hier knallt es bei Länge 0 !
  2.     glBufferData(GL_ARRAY_BUFFER, SizeOf(GLfloat) * Length(GLfloatArray), Pointer(GLfloatArray), GL_STATIC_DRAW);  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jun 02, 2016 08:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Pointer ist ja eben nicht was Finalspace hier übergeben kann. Es muss vorher dereferenziert werden. Das ist auch der Witz an "var" Argumenten: die dürfen nicht nil sein.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jun 04, 2016 14:49 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ja das var - das hab ich total vergessen. Da kann man ja auch Strukturen reinkippen. Danke für die Info.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 17 Queries | GZIP : On ]