Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Interner Fehler: LA33 (https://www.delphipraxis.net/134391-interner-fehler-la33.html)

implementation 21. Mai 2009 09:06


Interner Fehler: LA33
 
Momentan macht Delphi bei mir wieder sehr seltsame Probleme.
Delphi-Quellcode:
program wd4gexec;

uses
  Dialogs,
  SysUtils,
  wd4gstruct.postings,
  Forms;

{$R *.res}

var Test: TLogicalList;
var x:string;

begin
   SetLengthOfLogList(Test,48);
   Test[0] := 127;
   SetBitInLogList(Test,2,false);
   ShowMessage(IntToStr(Test[0]));
end.
Wenn ich beispielsweise dieses Programm compilieren will, heißt es entweder in der unteren Leiste
"[Fataler Fehler] wd4gexec.dpr (21): F2084 Interner Fehler: LA33"
oder es erscheint ein Dialog
"Zugriffsverletzung bei Adresse 08717501 in Modul 'dcc90.dll'. Lesen von Adresse 0000000F."
Gestern hat der gleiche Quelltext noch funktioniert.
Delphi-Quellcode:
program wd4gexec;

uses
  Dialogs,
  SysUtils,
  //wd4gstruct.postings,
  Forms;

{$R *.res}

// var Test: TLogicalList;
var x:string;

begin
  // SetLengthOfLogList(Test,48);
  // Test[0] := 127;
  // SetBitInLogList(Test,2,false);
  // ShowMessage(IntToStr(Test[0]));
  WriteLn('lol');
  ReadLn(x);
end.
Wenn ich es in der Form compilieren will, passiert erst einmal gar nichts.

Ergebnis der Reperatur von Delphi: kein Erfolg.
Selbst eine Neuinstallation hat nichts gebracht.

Was geht hier vor?

Die Muhkuh 21. Mai 2009 09:30

Re: Interner Fehler: LA33
 
Was macht SetLengthOfLogList?

Musst Du die Liste nicht erst noch instantiieren?

implementation 21. Mai 2009 09:36

Re: Interner Fehler: LA33
 
TLogicalList ist keine Liste, sondern nur ein dynamisches Array.
SetLengthOfLogList(Test,48 ) bewirkt das gleiche wie SetLength(Test,6)

TLogicalList soll viele logische Werte speichern können.
Sinnvoll wäre ein Array Of Boolean.
Das verbraucht jedoch für jeden Wert im Array ein Byte.

Ich habe es daher so definiert:
type TLogicalList = Array Of Byte;

Dann wird jeder logische Wert durch ein Bit dargestellt.
Die 48 in "SetLengthOfLogList(Test,48 )" steht für 48 Logische Werte = 48 Bits = 6 Bytes.

Um einen einzelnen Wert zu setzen, benutzt man SetBitInLoglist(var Loglist: TLogicalList; index: Word; Value: Boolean);

SetBitInLogList(Test,2,false) setzt also den dritten logischen Wert auf 0 (false).

Bernhard Geyer 21. Mai 2009 21:33

Re: Interner Fehler: LA33
 
Wieso wird gleich im Delphi neu installiert? Zu 99,5% der Fälle ist dies sinnlos da Programmierfehler vorlegen?

Ist dein den nun ein Konsolen oder ein normales GUI-Programm? Für ein Konsolenprogramm ist komisch das die Unit Forms eingebunden ist. Ich Tipp mal drauf das in den Projektoptionen die entsprechende OPtion nicht auf Consolenanwendung steht.

jaenicke 21. Mai 2009 22:39

Re: Interner Fehler: LA33
 
Es fehlt ja auch die entsprechende Zeile, die nach der ersten Zeile dann folgen würde:
Delphi-Quellcode:
{$APPTYPE CONSOLE}

Bernhard Geyer 21. Mai 2009 22:41

Re: Interner Fehler: LA33
 
Ach ja: D2005. Zweitschlechtestes Delphi aller Zeiten. Wenn möglich auf Turbo Delphi wechsenl

mr_emre_d 21. Mai 2009 22:54

Re: Interner Fehler: LA33
 
Zitat:

Zitat von implementation
Dann wird jeder logische Wert durch ein Bit dargestellt.
Die 48 in "SetLengthOfLogList(Test,48 )" steht für 48 Logische Werte = 48 Bits = 6 Bytes

Hab ich etwas verpasst ? Seit wann ist denn ein (Delphi) Byte nur 1/8 Byte ?
Ein Byte = 8 Bits und nicht vice versa -> ..( Test, 48 ) = 48 Bytes

Soweit ich etwas nicht missverstanden habe.

MfG

xZise 21. Mai 2009 23:07

Re: Interner Fehler: LA33
 
Hallo Emre,
ich glaube du hast ihn falsch verstanden: Er speichert mehrere Booleans (= 1 Bit) in einem Byte (= 8 Bit). Wenn er nun 48 Booleans möglichst Platzsparend unterbringen will, dann kann er das in 6 Bytes tun, da 6 Bytes 48 Bit sind.

MfG
xZise

turboPASCAL 21. Mai 2009 23:55

Re: Interner Fehler: LA33
 
Mal das Project neu "erstellt", also nicht nur compiliert?

implementation 22. Mai 2009 07:48

Re: Interner Fehler: LA33
 
Zitat:

Zitat von Bernhard Geyer
Ist dein den nun ein Konsolen oder ein normales GUI-Programm? Für ein Konsolenprogramm ist komisch das die Unit Forms eingebunden ist. Ich Tipp mal drauf das in den Projektoptionen die entsprechende OPtion nicht auf Consolenanwendung steht.

Es ist ein GUI-Programm. Ich habe bei den Linker-Optionen Konsolenprogramm aktiviert. Das ist nicht das Problem.
Zitat:

Zitat von jaenicke
Es fehlt ja auch die entsprechende Zeile, die nach der ersten Zeile dann folgen würde:
Delphi-Quellcode:
{$APPTYPE CONSOLE}

Das kann ich mir dann wohl sparen.
Zitat:

Zitat von Bernhard Geyer
Ach ja: D2005. Zweitschlechtestes Delphi aller Zeiten. Wenn möglich auf Turbo Delphi wechsenl

Bei Turbo Delphi kann ich aber auch keine eigenen Packages installieren, was mir sehr wichtig ist.
Zitat:

Zitat von turboPASCAL
Mal das Project neu "erstellt", also nicht nur compiliert?

Kam nichts anderes bei raus.
Zitat:

Zitat von Bernhard Geyer
Wieso wird gleich im Delphi neu installiert? Zu 99,5% der Fälle ist dies sinnlos da Programmierfehler vorlegen?

Ich kann nur erneut darauf verweisen, dass der selbe Quelltext unverändert ein paar Tage vorher noch funktionierte. Deshalb wird es wohl kaum daran liegen.

Bernhard Geyer 22. Mai 2009 07:51

Re: Interner Fehler: LA33
 
Zitat:

Zitat von implementation
Zitat:

Zitat von Bernhard Geyer
Ist dein den nun ein Konsolen oder ein normales GUI-Programm? Für ein Konsolenprogramm ist komisch das die Unit Forms eingebunden ist. Ich Tipp mal drauf das in den Projektoptionen die entsprechende OPtion nicht auf Consolenanwendung steht.

Es ist ein GUI-Programm. Ich habe bei den Linker-Optionen Konsolenprogramm aktiviert. Das ist nicht das Problem.

Und was soll raus kommen wenn du kein Formular erzeugen lässt :gruebel: Und was soll WriteLn und ReadLn in einem Programm ohne offenes Konsolenfenster :gruebel:

implementation 22. Mai 2009 07:54

Re: Interner Fehler: LA33
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von implementation
Zitat:

Zitat von Bernhard Geyer
Ist dein den nun ein Konsolen oder ein normales GUI-Programm? Für ein Konsolenprogramm ist komisch das die Unit Forms eingebunden ist. Ich Tipp mal drauf das in den Projektoptionen die entsprechende OPtion nicht auf Consolenanwendung steht.

Es ist ein GUI-Programm. Ich habe bei den Linker-Optionen Konsolenprogramm aktiviert. Das ist nicht das Problem.

Und was soll raus kommen wenn du kein Formular erzeugen lässt :gruebel: Und was soll WriteLn und ReadLn in einem Programm ohne offenes Konsolenfenster :gruebel:

1.) Das Form hätte ich später noch erstellt.
2.) Es ist doch ein Konsolenfenster offen.
Wenn ich bei den Linkeroptionen "Konsolenanwendung" aktiviere, startet auch ein GUI-Programm mit Konsolenfenster, was sehr praktisch ist, da man dann auch in die Konsole schreiben kann, aber trotzdem ein Form hat.

Bernhard Geyer 22. Mai 2009 08:22

Re: Interner Fehler: LA33
 
Zitat:

Zitat von implementation
1.) Das Form hätte ich später noch erstellt.
2.) Es ist doch ein Konsolenfenster offen.

Und sowas ist aus deinem ersten Post sichtbar :?

hoika 22. Mai 2009 09:58

Re: Interner Fehler: LA33
 
Hallo,

soclhe Fehler findet man nur durch Auskommentieren,
probieren , rein, probieren.

Du hattest ja schon damit angefangen.

Der nächste Schritt, das uses wieder rein
(Code unten bleibt auskommentiert )

Kommt der Fehler wieder,
in der Unit beginnen auskommentieren.

Ich denke, die Unit solltest du mal posten.


usw.


Delphi-Quellcode:
uses
  wd4gstruct.postings
Was ist das für eine seltsame Unit ?



Heiko

Bernhard Geyer 22. Mai 2009 10:03

Re: Interner Fehler: LA33
 
Zitat:

Zitat von hoika
Delphi-Quellcode:
uses
  wd4gstruct.postings
Was ist das für eine seltsame Unit ?

Ab D2005 werden doch Namspace-Angaben in den Unitnamen unterstützt :-) (z.B. Borland.Vcl.xxx für die Net-Spezifischen Units in VCL.NET)


@Fragesteller:

Könntest du ein komplettes Testprojekt posten das bei dir nicht kompilierbar ist?

mkinzler 22. Mai 2009 10:05

Re: Interner Fehler: LA33
 
Zitat:

Ab D2005 werden doch Namspace-Angaben in den Unitnamen unterstützt Smile
Ab D7 ( D2005 ist ja eigentlich auch nur D7 Upd2)

Bernhard Geyer 22. Mai 2009 10:12

Re: Interner Fehler: LA33
 
Zitat:

Zitat von mkinzler
Zitat:

Ab D2005 werden doch Namspace-Angaben in den Unitnamen unterstützt Smile
Ab D7 ( D2005 ist ja eigentlich auch nur D7 Upd2)

Compiler mag sein, aber niemand will die IDE's auf gleiche Ebene was Usability und Stabilität betrifft stellen.

mkinzler 22. Mai 2009 10:17

Re: Interner Fehler: LA33
 
Wobei hier aber D7 besser ist :zwinker:

implementation 22. Mai 2009 13:38

Re: Interner Fehler: LA33
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von implementation
2.) Es ist doch ein Konsolenfenster offen.

Und sowas ist aus deinem ersten Post sichtbar :?

Zumindest habe ich gerade schon erwähnt, dass ich in den Linkeroptionen "Konsolenanwendung" aktiviert habe.

Zitat:

Zitat von Bernhard Geyer
Könntest du ein komplettes Testprojekt posten das bei dir nicht kompilierbar ist?

Wird gemacht!

Zitat:

Zitat von Bernhard Geyer
Ach ja: D2005. Zweitschlechtestes Delphi aller Zeiten. Wenn möglich auf Turbo Delphi wechsenl

Jetzt weißt du auch, warum ich kein Turbo-Delphi nutze: wd4gstruct ist ein Package.

mkinzler 22. Mai 2009 13:57

Re: Interner Fehler: LA33
 
Zitat:

Jetzt weißt du auch, warum ich kein Turbo-Delphi nutze: wd4gstruct ist ein Package.
Na und. Packages funktionieren doch problemlos.

implementation 22. Mai 2009 16:25

Re: Interner Fehler: LA33
 
Auf Turbo Delphi kann man keine installieren.

mkinzler 22. Mai 2009 16:28

Re: Interner Fehler: LA33
 
Aber trotzdem benutzen!

implementation 22. Mai 2009 16:33

Re: Interner Fehler: LA33
 
Und was habe ich davon, wenn ich keine installieren kann?
Dann kann ich ja nur die mitgelieferten benutzen.

Außerdem löst das Umsteigen mein Problem auch nicht.
Irgendwie muss es ja auch mit D2005 funzen.

Wie gesagt, der selbe Quelltext hat kurz vorher noch funktioniert.

mkinzler 22. Mai 2009 16:34

Re: Interner Fehler: LA33
 
Zitat:

Und was habe ich davon, wenn ich keine installieren kann?
Dann kann ich ja nur die mitgelieferten benutzen.
Nein, wenn du die Komponenten manuell erzeugst, kannst du alle verwenden.

implementation 22. Mai 2009 16:37

Re: Interner Fehler: LA33
 
Zitat:

Zitat von mkinzler
Nein, wenn du die Komponenten manuell erzeugst, kannst du alle verwenden.

Wie meinst du das?

mkinzler 22. Mai 2009 16:43

Re: Interner Fehler: LA33
 
Einfach Komponente(n) manuell instantieeren.
Delphi-Quellcode:
<Kompo> := T<Kompo>.Create(<Owner>);
<Kompo>.parent := <Parent>;
<Kompo>.Left := <Linker Rand>;
<Kompo>.Top := <Oberer Rand>;
...
Wenn die GExperts (Experte "Components To Code") installierst sind, kann man auch D7/D2005 als Formulardesigner für TDE verwenden

implementation 22. Mai 2009 16:50

Re: Interner Fehler: LA33
 
Und wie binde ich dann das Package mit den Komponenten ein?

mkinzler 22. Mai 2009 16:54

Re: Interner Fehler: LA33
 
Diese müssen nur im Pfad liegen. Units manuell in Uses aufnehmen.

implementation 22. Mai 2009 17:03

Re: Interner Fehler: LA33
 
Dann habe ich die Units einzeln. Dann muss ich das ganze ja nicht in ein Package stecken, oder?

Außerdem ist diese Diskussion sowieso sinnlos, da ich schon Turbo C++ installiert habe.
Irgendwie muss ja auch D2005 funzen.

OldGrumpy 22. Mai 2009 17:42

Re: Interner Fehler: LA33
 
Zitat:

Zitat von implementation
Irgendwie muss ja auch D2005 funzen.

Ja, und zwar grottig. Ich habe unseren Chef damals monatelang bekniet, endlich die 2006er Version anzuschaffen. Ich habe graue Haare dabei gekriegt, mich mit dem 2005er rumzuschlagen :(


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