![]() |
die aufzurufende funktion wurde vom linker entfernt
Ja so einen Thread gibt es schon ;)
Bekomme langsam die Krise hier. So eine Meldung hatte ich vorher noch nie. Dadurch bedingt funktioniert die Classe nicht mehr.
Delphi-Quellcode:
warum wird setData und getData vom Linker ausgeschlossen?
unit uSprite;
interface uses Windows, Classes, Messages, SysUtils, Graphics, uGlobal, SKAeroAPI; const ID_LEFT = -1; ID_RIGHT = -2; ID_FLARE = -3; ID_BLUEFLARE = -4; ID_FOCUS = -5; SCALE_DEFAULT = 80; SCALE_MAX = 105; SCALE_STEP = 2; LBOUND = ID_FOCUS; type TSprite = class(TObject) private FX: Integer; FY: Integer; FW: Integer; FH: Integer; FScale: Integer; FOpacity: Byte; FShellTo: string; FIconPath: PWideChar; FWorkDir: PWideChar; FUseLabel: string; FCmdLine: PWideChar; FShowCmd: LongInt; FBitmap: HBitmap; FVisible: Bool; function getH: Integer; function getW: Integer; function getX: Integer; function getY: Integer; procedure setH(const Value: Integer); procedure setW(const Value: Integer); procedure setX(const Value: Integer); procedure setY(const Value: Integer); function GetBitmap: HBitmap; function GetCmdLine: PWideChar; function GetIconPath: PWideChar; function GetOpacity: Byte; function GetScale: Integer; function GetShellTo: string; function GetShowCmd: LongInt; function GetUseLabel: string; function GetVisible: Bool; function GetWorkDir: PWideChar; procedure SetBitmap(const Value: HBitmap); procedure SetCmdLine(const Value: PWideChar); procedure SetIconPath(const Value: PWideChar); procedure SetOpacity(const Value: Byte); procedure SetScale(const Value: Integer); procedure SetShellTo(const Value: string); procedure SetShowCmd(const Value: LongInt); procedure SetUseLabel(const Value: string); procedure SetVisible(const Value: Bool); procedure SetWorkDir(const Value: PWideChar); public property x: Integer read getX write setX; property y: Integer read getY write setY; property w: Integer read getW write setW; property h: Integer read getH write setH; property Scale: Integer read GetScale write SetScale; property Opacity: Byte read GetOpacity write SetOpacity; property ShellTo: string read GetShellTo write SetShellTo; property IconPath: PWideChar read GetIconPath write SetIconPath; property WorkDir: PWideChar read GetWorkDir write SetWorkDir; property UseLabel: string read GetUseLabel write SetUseLabel; property CmdLine: PWideChar read GetCmdLine write SetCmdLine; property ShowCmd: LongInt read GetShowCmd write SetShowCmd; property Bitmap: HBitmap read GetBitmap write SetBitmap; property Visible: Bool read GetVisible write SetVisible; end; TNegativeArray = class(TObject) private Fdata : array of TSprite; FMaxValue: Integer; function getData(index : Integer) : TSprite; inline; procedure setData(index : Integer; aData : TSprite); inline; function GetMaxValue: Integer; procedure SetMaxValue(const Value: Integer); public Constructor Create(aLenght : Integer); Destructor Destroy; override; property Data[index: Integer]: TSprite read getData write setData; default; property MaxValue: Integer read GetMaxValue write SetMaxValue; end; var gs: TNegativeArray; implementation { TSprite } function TSprite.GetBitmap: HBitmap; begin Result := FBitmap; end; function TSprite.GetCmdLine: PWideChar; begin Result := FCmdLine; end; function TSprite.getH: Integer; begin Result := FH; end; function TSprite.GetIconPath: PWideChar; begin Result := FIconPath; end; function TSprite.GetOpacity: Byte; begin Result := FOpacity; end; function TSprite.GetScale: Integer; begin Result := FScale; end; function TSprite.GetShellTo: string; begin Result := FShellTo; end; function TSprite.GetShowCmd: LongInt; begin Result := FShowCmd; end; function TSprite.GetUseLabel: string; begin Result := FUseLabel; end; function TSprite.GetVisible: Bool; begin Result := FVisible; end; function TSprite.getW: Integer; begin Result := FW; end; function TSprite.GetWorkDir: PWideChar; begin Result := FWorkDir; end; function TSprite.getX: Integer; begin Result := FX; end; function TSprite.getY: Integer; begin Result := FY; end; procedure TSprite.SetBitmap(const Value: HBitmap); begin FBitmap := Value; end; procedure TSprite.SetCmdLine(const Value: PWideChar); begin FCmdLine := Value; end; procedure TSprite.setH(const Value: Integer); begin FH := Value; end; procedure TSprite.SetIconPath(const Value: PWideChar); begin FIconPath := Value; end; procedure TSprite.SetOpacity(const Value: Byte); begin FOpacity := Value; end; procedure TSprite.SetScale(const Value: Integer); begin FScale := Value; end; procedure TSprite.SetShellTo(const Value: string); begin FShellTo := Value; end; procedure TSprite.SetShowCmd(const Value: LongInt); begin FShowCmd := Value; end; procedure TSprite.SetUseLabel(const Value: string); begin FUseLabel := Value; end; procedure TSprite.SetVisible(const Value: Bool); begin FVisible := Value; end; procedure TSprite.setW(const Value: Integer); begin FW := Value; end; procedure TSprite.SetWorkDir(const Value: PWideChar); begin FWorkDir := Value; end; procedure TSprite.setX(const Value: Integer); begin FX := Value; end; procedure TSprite.setY(const Value: Integer); begin FY := Value; end; { TNegativeArray } constructor TNegativeArray.Create(aLenght: Integer); begin MaxValue := IIF(aLenght > 6, aLenght, 0); SetLength(fdata, aLenght); end; destructor TNegativeArray.Destroy; begin inherited; end; function TNegativeArray.getData(index: Integer): TSprite; begin assert(index <= 0); result := fData[abs(index)]; end; function TNegativeArray.GetMaxValue: Integer; begin Result := FMaxValue; end; procedure TNegativeArray.setData(index: Integer; aData: TSprite); begin assert(index <= 0); fData[abs(index)] := aData; end; procedure TNegativeArray.SetMaxValue(const Value: Integer); begin FMaxValue := Value; end; end. Optimierung ist ausgeschaltet. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Rufst Du die den von irgendwo auf?
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Delphi-Quellcode:
FBitmap und die anderen Zuweisungen gehen nicht mehr weil der Linker set und getData entfernt hat.
gs := TNegativeArray.Create(6);
gS[0].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'UseBack.png', width, height); gS[0].w := width; gS[0].h := height; gS[0].x := 0; gS[0].y := MAX(YMIN_SIZE - gS[0].h, 0); gS[0].opacity := 255;
Delphi-Quellcode:
fdata ?constructor TNegativeArray.Create(aLenght: Integer); begin MaxValue := IIF(aLenght > 6, aLenght, 0); SetLength(fdata, aLenght); end; Oder wo liegt der Fehler? gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Delphi-Quellcode:
machst du aber schon irgendwo?
gs[0] := TSprite.Create;
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
|
AW: die aufzurufende funktion wurde vom linker entfernt
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Nur dann müsste ich für jede FData[abs(index)] die Classe TSprite erstellen. Irgendwie ist die Classe so nicht verwendbar. Hmmm.. So wie die aufgebaut ist kann ich NUR Negative werte inklusive 0 verwenden. Die Icons haben aber Positive werte > max 100.
Delphi-Quellcode:
Aber trotzdem wird set und getData entfernt.
constructor TNegativeArray.Create(aLenght: Integer);
var i: Integer; begin MaxValue := IIF(aLenght > 6, aLenght, 0); //Eigentlich quatsch da die Classe nur Negative werte unterstützt 7 wäre in dem Fall dann -7 und nicht 1 wie benötigt. SetLength(FData, aLenght); for i := 0 to aLenght do FData[i] := TSprite.create; end; Siehe Pic. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Wo wird denn GetData verwendet? Ich sehe nur die Verwendung von FData.
Wenn du die Property published machst, wird sie auch immer einkompiliert. |
AW: die aufzurufende funktion wurde vom linker entfernt
Dein Problem ist das der Index nicht stimmt und somit dein Assertion auslöst. Deine Methoden werden also nicht vom Linker entfernt. Aber du hast keine blauen Punkte weil die Methoden als Inline markiert sind.
Wäre jetzt meine wilde Vermutung, basierend auf dem Screenshot.... |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Zitat:
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Das wird mir angezeigt wenn ich mit der Maus über
Delphi-Quellcode:
dem Bitmap gehe.
gS[0].Bitmap :=
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Assertion failed. getData ist jetzt aktiviert ändert aber nichts. Ich glaube es ist besser den Code komplett umzuschreiben und die Classe in die Tonne werf ;) wenn ich keine praktikable Lösung finde. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Inline ... da gibt es eben nicht DIE eine Methode, sondern viele Kopieen davon, innerhalb der aufrufenden Codestellen.
[edit] erst hängt das Netz und sind Viele hier voll gemein und antworten einfach so zwischendurch. :cry: |
AW: die aufzurufende funktion wurde vom linker entfernt
Setze jetzt mal einen Haltepunkt auf assert(..) und schaue ob dort ein positiver Index kommt.
|
AW: die aufzurufende funktion wurde vom linker entfernt
Das Inline ist nicht schuld. Es ist das Assert. Da kommt vermutlich ein positiver Wert rein. Aber mit deinem Assert stellst du sicher, das nur negative Werte und Null akzeptiert werden.
Da du da eh noch ein Abs hast, sind die Asserts falsch und überflüssig ;) |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Mit Inline kann ich eh keinen Haltepunkt setzen. Ohne Inline kann ich Haltepunkte bei getData setzen. (Aber es kracht bei Assertion. setData hingegen ist immer noch ausgeschlossen kann keinen Haltepunkt setzen. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Obwohl der Kram immer noch entfernt wird. Ich werde die Classe verwerfen das macht keinen sinn. Für mein anderes Problem mache ich einen neuen Thread auf. Danke. Zitat:
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
In der Zwischenzeit sollen wohl auch Indizies > 0 verwendet werden. Ohne Translation der Indizies adressieren die Positionen -X und X die gleiche Zelle im Array, es sollen aber - soweit ich verstehe was er will - unterschiedliche Daten an -X und X gespeichert werden. Durch das Assert wäre ihm das wenigstens aufgefallen, ohne Assert ist der Fehler später viel schwerer zu erkennen. cu Ha-Jö |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Zum besseren Verständnis. Hier werden die Bitmap Ressourcen addiert die für das Window später verwendet werden. Die Values gehen von -5 > 0
Delphi-Quellcode:
Das Problem mit dieser Classe ist das ich NUR Negative Values addieren kann.
procedure AddChildControls();
begin gs := TNegativeArray.Create(6); // -5 to 0 gS[0].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'UseBack.png', width, height); gS[0].w := width; gS[0].h := height; gS[0].x := 0; gS[0].y := MAX(YMIN_SIZE - gS[0].h, 0); gS[0].opacity := 255; gS[ID_LEFT].x := 0; gS[ID_LEFT].y := YMIN_SIZE - 25; gS[ID_LEFT].opacity := 128; gS[ID_LEFT].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'Left.png', width, height); gS[ID_LEFT].w := width; gS[ID_LEFT].h := height; gS[ID_RIGHT].x := gS[0].w - gS[ID_LEFT].w; gS[ID_RIGHT].y := YMIN_SIZE - 25; gS[ID_RIGHT].opacity := 128; gS[ID_RIGHT].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'Right.png', width, height); gS[ID_RIGHT].w := width; gS[ID_RIGHT].h := height; gS[ID_FLARE].x := 0; gS[ID_FLARE].y := 16; gS[ID_FLARE].opacity := 200; gS[ID_FLARE].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'Flare.png', width, height); gS[ID_FLARE].w := width; gS[ID_FLARE].h := height; gS[ID_BLUEFLARE].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'BlueFlare.png', width, height); gS[ID_BLUEFLARE].w := width; gS[ID_BLUEFLARE].h := height; gS[ID_BLUEFLARE].x := 0; gS[ID_BLUEFLARE].y := YMIN_SIZE - (gS[ID_BLUEFLARE].h + 3); gS[ID_BLUEFLARE].opacity := 255; gS[ID_FOCUS].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'Focus.png', width, height); gS[ID_FOCUS].w := width; gS[ID_FOCUS].h := height; gS[ID_FOCUS].x := 0; gS[ID_FOCUS].y := YMIN_SIZE - (gS[ID_FOCUS].h + 4); gS[ID_FOCUS].opacity := 128; end; Bsp. Icons werden addiert.
Delphi-Quellcode:
Hier wird das Array normalerweise redimensioniert.
if CreateBarIcon(sIconSearch, nFound) then
begin inc(nCount); //Setlength(gS, nCount); funktioniert nicht mher wegen der neuen Classe gS[nCount].y := nHeight; gS[nCount].SCALE := SCALE_DEFAULT; gS[nCount].opacity := 255; sUseThumb := sTempPath + 'OTTB ' + IntToStr(nFound) + '.png'; gS[nCount].Bitmap := CreateDockIcon(sUseThumb, gS[nCount].w, gS[nCount].h); DeleteFile(sUseThumb); if DoLnk then gS[nCount].ShellTo := Lowercase(sTarget); Wenn gS positive werte bekommt sind sie am ende doch Negativ bedingt durch die Classe. Das Array gS muss eine Kombination von Negativen und Positiven werten sein. Da das aber nicht geht werde ich wohl oder übel wieder alles umbauen müssen. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Delphi-Quellcode:
einfach z.B: das hier nehmen:
function TNegativeArray.getData(index: Integer): TSprite;
begin assert(index <= 0); result := fData[abs(index)]; end;
Delphi-Quellcode:
Edit: Quelltext angepasst, siehe unten.
function TNegativeArray.getData(index: Integer): TSprite;
begin if Index < 0 then result := fData[abs(index + 1) * 2 + 1] else result := fData[index*2]; end; |
AW: die aufzurufende funktion wurde vom linker entfernt
Delphi-Quellcode:
Zusätzlich habe ich immer noch das Problem bei der Redimensionierung.
function TNegativeArray.getData(index: Integer): TSprite;
begin if Index < 0 then result := fData[abs(index + 1) * 2 + 1] else result := fData[index * 2]; fData[abs(index)]; //[DCC Fehler] uSprite.pas(297): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'TSprite' gefunden end;
Delphi-Quellcode:
Irgendwie ein Anfang ohne Ende ;)
if CreateBarIcon(sIconSearch, nFound) then
begin inc(nCount); //Setlength(gS, nCount); Denke mal Zitat:
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Genau.
Delphi-Quellcode:
muss weg. Das stand da noch von vorher. Copy&Paste halt.
fData[abs(index)];
Für deine Dimensionierung (SetLength) machst du einfach eine Methode in die Klasse, die dies vornimmt; Wenn dein TNegativeArray von -n..+n geht, musst du SetLength mit n*2+1 aufrufen; |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Danke.. wenn es funktioniert kann ich die vielleicht doch noch verwenden. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Delphi-Quellcode:
Dann kannst du dein Array mit TNegativeArray = class(TObject) ... public ... procedure SetLen(n: Integer); property Data[index: Integer]: TSprite read getData write setData; default; property MaxValue: Integer read GetMaxValue write SetMaxValue; end; procedure TNegativeArray.SetLen(n: Integer); begin SetLength(fData, n*2+1); end;
Delphi-Quellcode:
gs.SetLen(n) dimensionieren.
|
AW: die aufzurufende funktion wurde vom linker entfernt
Danke werde es gleich mal testen. ;)
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Hmmm...
Bei
Delphi-Quellcode:
also Index -4 kracht es beim einlesen der Bitmap. :wall:
gS[ID_BLUEFLARE].Bitmap :=
Delphi-Quellcode:
Es sind alle Arrays mit TSprite.Create zugewiesen.
procedure TSprite.SetBitmap(const Value: HBitmap);
begin FBitmap := Value; end; Das HBitmap handle was übergeben werden soll ist auch korrekt. getData ist wieder nicht zugewiesen. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Was gibst du denn beim Create für einen Wert für aLength an?
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Delphi-Quellcode:
constructor TNegativeArray.Create(aLenght: Integer);
var i: Integer; begin MaxValue := IIF(aLenght > 6, aLenght, 0); SetLength(FData, aLenght); for I := 0 to aLenght do FData[i] := TSprite.Create; end;
Delphi-Quellcode:
gs := TNegativeArray.Create(6);
gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
6 ist auch zu wenig => n*2+1
Da du scheinbar mit 5 anfängst also 11. |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
-5 > 0 = 6 Einträge gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
oder so:
Delphi-Quellcode:
constructor TNegativeArray.Create(aLenght: Integer);
var i: Integer; begin MaxValue := IIF(aLenght > 6, aLenght, 0); SetLength(FData, aLenght*2+1); for I := 0 to (aLenght*2) do FData[i] := TSprite.Create; end; |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
|
AW: die aufzurufende funktion wurde vom linker entfernt
Oder gehen deine negativen Zahlen immer nur bis -5 runter, d.h. -6, -7 etc. gibt es nie?
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Wenn ich auf UBOUND also High(gs) hin prüfe dann muss das Array genau stimmen. Ich kann keine Eigenschaften an einem nicht verwendeten Array Eintrag vergeben. Scheint doch irgendwie nicht richtig zu laufen. Bedenke Theoretisch könnte ich zusätzliche 100 Icons zum Array addieren wenn sie auf dem Desktop liegen. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Das sind bei dieser Anwendung ganze 6 Stück. Also nein es geht niemals unter -5 und 0 ist der höchste Eintrag.. für die Bitmaps. Dazu kommen dann natürlich im positiven Bereich die Icons. Deshalb muss ich ja dann das Array Redimensionieren ohne das die Einträge -5 > 0 verloren gehen. Verstehe das nicht das man in Delphi keine minus werte einem Array hinzufügen kann. :wall::kotz: gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Dann kommt natürlich sowas in Frage:
Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin result := fData[index + 5] end; |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
|
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
Die minus werte bis 0 ja aber der Rest beim neu Dimensionieren nicht. Mir gehen die Daten von -5 > 0 verloren. Na ja ein Versuch war es wert. Eventuell muss ich dafür ein neues, eigenes Array definieren welches nur die Icons verwaltet. Der sinn des ganzen ist das ich nur ein Array verwende mit dem ich alle Daten vergleichen und bearbeiten kann. Also minus für die Bitmaps und Plus für den Rest. gruss |
AW: die aufzurufende funktion wurde vom linker entfernt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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