AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi die aufzurufende funktion wurde vom linker entfernt
Thema durchsuchen
Ansicht
Themen-Optionen

die aufzurufende funktion wurde vom linker entfernt

Ein Thema von EWeiss · begonnen am 1. Mai 2017 · letzter Beitrag vom 2. Mai 2017
Antwort Antwort
hanvas

Registriert seit: 28. Okt 2010
171 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 19:06
Da du da eh noch ein Abs hast, sind die Asserts falsch und überflüssig
Sind Sie nicht. Die ursprüngliche Frage (in einem anderen Thread) war die Verwendung ausschließlich negativer Indicies für das Array, zu nichts anderem ist die Klasse gut. Positive Indizies werden nicht unterstützt.

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ö
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 19:27
Da du da eh noch ein Abs hast, sind die Asserts falsch und überflüssig
Positive Indizies werden nicht unterstützt.

cu Ha-Jö
Ja und das ist mein Problem daher muss ich trotz deiner guten Arbeit die Classe verwerfen.

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:
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;
Das Problem mit dieser Classe ist das ich NUR Negative Values addieren kann.
Bsp.
Icons werden addiert.

Delphi-Quellcode:
    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);
Hier wird das Array normalerweise redimensioniert.
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
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
779 Beiträge
 
#3

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 22:07
Das Problem mit dieser Classe ist das ich NUR Negative Values addieren kann.

...

Hier wird das Array normalerweise redimensioniert.
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.
Wer sagt, dass das nicht geht? Anstatt

Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin
  assert(index <= 0);
  result := fData[abs(index)];
end;
einfach z.B: das hier nehmen:

Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin
  if Index < 0 then
    result := fData[abs(index + 1) * 2 + 1]
  else
    result := fData[index*2];
end;
Edit: Quelltext angepasst, siehe unten.

Geändert von Olli73 ( 1. Mai 2017 um 22:53 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 22:21
Delphi-Quellcode:
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;
Zusätzlich habe ich immer noch das Problem bei der Redimensionierung.

Delphi-Quellcode:
    if CreateBarIcon(sIconSearch, nFound) then
    begin
      inc(nCount);
      //Setlength(gS, nCount);
Irgendwie ein Anfang ohne Ende

Denke mal
Zitat:
fData[abs(index)];
wird nicht mehr benötigt.


gruss

Geändert von EWeiss ( 1. Mai 2017 um 22:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
779 Beiträge
 
#5

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 22:52
Genau. fData[abs(index)]; muss weg. Das stand da noch von vorher. Copy&Paste halt.

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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 22:55
Genau. fData[abs(index)]; muss weg. Das stand da noch von vorher. Copy&Paste halt.

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;
Kleines Beispiel muss sonst raten
Danke.. wenn es funktioniert kann ich die vielleicht doch noch verwenden.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
779 Beiträge
 
#7

AW: die aufzurufende funktion wurde vom linker entfernt

  Alt 1. Mai 2017, 23:15
Delphi-Quellcode:

  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;
Dann kannst du dein Array mit gs.SetLen(n) dimensionieren.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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