Probleme mit KOL

Rund um die LCL und andere Komponenten
Antworten
br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Probleme mit KOL

Beitrag von br_klaus »

Hallo, ich weiß nicht so recht, ob das Thema in dieses Unterforum paßt (vielleicht wäre es gut, ein eigenes Unterforum KOL einzurichten, weil es ja etwas ganz Spezielles ist).

Ist einer unter euch, der sich schon näher mit KOL befaßt hat?
Ich bin seit Wochen dabei, mich damit anzufreunden, und es ging auch recht gut. Aber jetzt habe ich ein Problem:
KOL benützt hauptsächlich Objects und arbeitet fast nur mit Zeigervariablen, sodaß ein minimaler Speicher gebraucht wird. Außerdem werden von eingebundenen DLL´s und Units immer nur die Teile eingebunden, die auch wirklich gebraucht werden.
(So ist zB ein Programm, das ich gerade erstelle, unter KOL = 650 KB, und das zusammen mit allen DebugInformationen, unter Lazarus jedoch (weil die FreeImage.DLL mit 2,5 MB eingebaut ist) 15,6 MB).

Bisher hat der Compiler anstandslos die Konstrukte in KOL akzeptiert. Ich habe jedoch jetzt Lazarus völlig neu installiert (mit dem neuesten Snapshot für win32, der anscheinend vom 10.7. ist), und da bekomme ich plötzlich Schwierigkeiten:

KOL definert erst ein (riesiges) object TObj und davon abgeleitet ein TImage = object(TObj), und zwar in folgender Form:

Code: Alles auswählen

uses Windows, Messages,...
interface
 
type 
PObj = ^TObj;
Tobj = object
...
end;
 
PImage = ^TImage;
TImage = object(TObj)
....
end;
Bisher hat der Compiler immer akzeptiert, daß sich PImage nicht auf die Windows.TImage bezieht, sondern auf die danach erst definerte TImage.
Aber jetzt, seit der Neuinstallation von Lazarus, nicht mehr. Es wird immer als Zeiger auf Windows.Timage interpretiert.
Gibt es da bestimmte Compilerschalter, mit denen man dieses Verhalten beeinflussen kann, oder was könnte ich sonst machen?

Herzlichen Dank!

br_klaus
Beiträge: 244
Registriert: Do 21. Jan 2010, 22:33
OS, Lazarus, FPC: Windows Vista (L 0.9.31 FPC 2.5.1)
CPU-Target: 32Bit
Wohnort: z.z. Brasilien, sonst 82335 Berg-Leoni (südlich von München)

Re: Probleme mit KOL

Beitrag von br_klaus »

Ich habe mir jetzt selbst geholfen, indem ich definiert habe:

Code: Alles auswählen

Type
  PBitmap = ^TKOLBitmap;
 
// dann TBitmap in TKOLBitmap umgenannt
TKOLBitmap = oject(TObj)
...
end;
// im Implementationsteil vor der ersten TBitmap-Implementierung:
 
Type TBitmap = TKOLBitmap;
Jetzt geht es, nur bei einer der Properties
bmp.DIBPixels[x,y]:=c
mußte ich die entsprechende private function nehmen: SetDIBPixels(x,y,c).
Zuletzt geändert von Lori am Mi 8. Aug 2012, 20:08, insgesamt 1-mal geändert.
Grund: Highlighter

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Probleme mit KOL

Beitrag von Socke »

br_klaus hat geschrieben:Bisher hat der Compiler immer akzeptiert, daß sich PImage nicht auf die Windows.TImage bezieht, sondern auf die danach erst definerte TImage.
Aber jetzt, seit der Neuinstallation von Lazarus, nicht mehr. Es wird immer als Zeiger auf Windows.Timage interpretiert.
Gibt es da bestimmte Compilerschalter, mit denen man dieses Verhalten beeinflussen kann, oder was könnte ich sonst machen?
Kann das sein, dass du da ein paar Dinge durcheinander bringst? In der Unit Windows gibt es kein TImage. Eventuell hast du auch eine Unit eingebunden, die ein TImage kennt; Dann müsstest du das so schreiben:

Code: Alles auswählen

unit kolunit;
uses myunit; // enthält TImage
interface
type
  PImage = ^kolunit.TImage; // Voller Name, also mit Unit
  TImage = object()
    // whatever
  end;
// usw.
Alternativ definierst du PImage erst nach TImage:

Code: Alles auswählen

type
  // hier ist noch TImage = myunit.TImage
  TImage = object()
    // whatever
  end;
  PImage = ^TImage; // jetzt ist TImage = kolumnit.TImage, da die aktuelle Unit eine höhere Präzedenz hat.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten