Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi die aufzurufende funktion wurde vom linker entfernt (https://www.delphipraxis.net/192566-die-aufzurufende-funktion-wurde-vom-linker-entfernt.html)

EWeiss 2. Mai 2017 00:25

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Olli73 (Beitrag 1369722)
Zitat:

Zitat von EWeiss (Beitrag 1369721)
Danke für deine Mühe aber es funktioniert so nicht.
Die minus werte bis 0 ja aber der Rest beim neu Dimensionieren nicht.
Mir gehen die Daten von -5 > 0 verloren.

Theoretisch müsste es so funktionieren. Dann hast du irgendwo noch einen Fehler drin....

Nein kein Fehler.
Nochmal ;)

Delphi-Quellcode:
    if CreateBarIcon(sIconSearch, nFound) then
    begin
      inc(nCount);
      gS.SetLen(nCount);

      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);
Wenn ein Icon gefunden wird ist CreateBarIcon true.
Danach wird nCount inkrementiert und die neue länge vom Array festgelegt.
nCount ist in diesen Fall 1 also > 0 trotzdem werden die anderen Arrays die drunter liegen gelöscht.

Ist auch logisch denn der Index eines Arrays fängt bei 0 an nicht bei -5 diese sind nur Virtuell.

gruss

Olli73 2. Mai 2017 00:30

AW: die aufzurufende funktion wurde vom linker entfernt
 
Wie sieht denn jetzt dein Funktion gS.SetLen() aus?

EWeiss 2. Mai 2017 00:35

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Olli73 (Beitrag 1369724)
Wie sieht denn jetzt dein Funktion gS.SetLen() aus?

Delphi-Quellcode:
  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;

    procedure SetLen(Len: Integer);
    property Data[Index: Integer]: TSprite read getData write setData; default;
    property MaxValue: Integer read GetMaxValue write SetMaxValue;
  end;
Delphi-Quellcode:
procedure TNegativeArray.SetLen(Len: Integer);
begin

  SetLength(fData, Len * 2 + 1);
end;
Scheint jetzt wohl falsch zu sein.

gruss

Olli73 2. Mai 2017 00:40

AW: die aufzurufende funktion wurde vom linker entfernt
 
Delphi-Quellcode:
procedure TNegativeArray.SetLen(Len: Integer);
begin
  SetLength(fData, Len + 5);

  // Hier müssen noch entsprechend Instanzen von TSprite erstellt werden
  // (nur für die, die neu hinzukommen)
end;

Olli73 2. Mai 2017 00:45

AW: die aufzurufende funktion wurde vom linker entfernt
 
sorry, muss +6 sein oben

EWeiss 2. Mai 2017 00:46

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Olli73 (Beitrag 1369726)
Delphi-Quellcode:
procedure TNegativeArray.SetLen(Len: Integer);
begin
  SetLength(fData, Len + 5);

  // Hier müssen noch entsprechend Instanzen von TSprite erstellt werden
  // (nur für die, die neu hinzukommen)
end;

Ich glaube muss mal eine VCL App erstellen mit der ich die Arrays prüfen kann. ;)
Ob die Indizien stimmen.

gruss

EWeiss 2. Mai 2017 01:46

AW: die aufzurufende funktion wurde vom linker entfernt
 
Eine ganz einfache Anwendung.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uSprite;

type
  TForm1 = class(TForm)
    MemoN: TMemo;
    btnAnalyze: TButton;
    btnValid: TButton;
    MemoValid: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure btnAnalyzeClick(Sender: TObject);
    procedure btnValidClick(Sender: TObject);
  private
    gS: TNegativeArray;
    MaxCount: Integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnAnalyzeClick(Sender: TObject);
var
  Count: Integer;
  rnd: Integer;
begin
  Count := 0;
  rnd := Random(100);

  repeat
    inc(Count);
    gS.SetLen(Count);

    gS[Count].x := Count;
    MemoN.Lines.Add(IntToStr(gS[Count].x));
  until Count = rnd;
end;

procedure TForm1.btnValidClick(Sender: TObject);
var
  i: Integer;
begin
  MemoValid.Clear;

  for i := 0 to MemoN.Lines.Count do
  if Assigned(gS[i]) then
    MemoValid.Lines.Add('True ' + IntToStr(gS[i].x));

end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin

  gS := TNegativeArray.Create(6);
  for i := -5 to 0 do
  begin
    gS[i] := TSprite.Create;
    gS[i].x := i;
    MemoN.Lines.Add(IntToStr(gS[i].x) + ' Count ' + IntToStr(MemoN.Lines.Count));
    MaxCount := i;
  end;

end;

end.
Ich muss jetzt mindestens 100 bzw. Random(100) Einträge addieren können ohne das die negativen Arrays zerstört werden.
Aber!
Beim zweiten Positiven Eintrag kracht es schon.
wie gehabt setData und getData werden vom Linker entfernt.
Sorry ich bekomme das mit dieser Classe nicht geregelt. (Vielleicht hat ja noch irgend jemand eine Idee.)

Wie man am Bild schon erkennen kann sind die ersten 4 Arrays Assigned aber alle Values von X falsch.
Und ich habe noch keine Positive Arrays addiert.

gruss

hoika 2. Mai 2017 04:34

AW: die aufzurufende funktion wurde vom linker entfernt
 
Hallo,
ich verstehe diese ganze negativ-Nummer einfach nicht.
Warum nimmst du statt das -5 bis 0 nicht einfach 0 bis 5 und
1. passt den Setter und Getter entsprechend an
Oder
2. übergibst als Parameter immer -X statt X
Oder
3. benutzt ein statisches Array -5 bis 0

Olli73 2. Mai 2017 09:22

AW: die aufzurufende funktion wurde vom linker entfernt
 
Liste der Anhänge anzeigen (Anzahl: 1)
So funktioniert es:
Anhang 47237

Edit: Und wenn du bei der Deklaration von getData und setData das "inline" rausnimmst, kannst du die Methoden auch debuggen.

EWeiss 2. Mai 2017 12:31

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

ich verstehe diese ganze negativ-Nummer einfach nicht.
Was ist da nicht zu verstehen. ?

Ich möchte NUR ein globales Array verwenden deshalb muss ich dieses selber in sich teilen.
Das geht nur in dem ich für den einen teil negative Bereiche verwende und den anderen Positive.
Jo könnte auch ein mehrdimensionales Array verwenden das verkompliziert die ganze Sache aber noch zusätzlich.

@Oli73
Danke für deine Hilfe werde es mal testen.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.
Seite 5 von 7   « Erste     345 67      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz