AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Access Violation durch Length(Array)?

Ein Thema von Jumpy · begonnen am 28. Nov 2012 · letzter Beitrag vom 30. Nov 2012
 
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Access Violation durch Length(Array)?

  Alt 29. Nov 2012, 22:55
[..] aber ohne ist mir die ganze is/as-Casterei zu lästig (müsste bei meiner momentanen Coderenovierung zuviel anpacken).
Du meinst TObjectList? Bei einer TList ist das so nicht erforderlich. Ich hab' mal auf die Schnelle was zusammen gezimmert. Ich will Dir das nicht aufzuschwatzen, aber das sollte doch in deine App mit vergleichsweise wenig Aufwand einzubauen sein? Der Vorteil wäre eine saubere Speicherverwaltung und die leichte Handhabbarkeit. Satt des Array's halt eine Instanz der Klasse verwenden.

Delphi-Quellcode:
unit uCallItems;

interface

uses
  Classes, TTAPICallunits;

type
  TCallItem = class
  private
    FCall: TTApiCall;
    FHandle: Cardinal;
  public
    property Call: TTApiCall read FCall;
    property Handle: Cardinal read FHandle;
    constructor Create(const AHandle: Cardinal);
    destructor Destroy; override;
  end;

  TCallItems = class(TList)
  private
    function GetItem(Index: integer): TCallItem;
    procedure AddItem(const AItem: TCallItem);
    procedure DelItem(Index: integer);
  public
    procedure AddCall(const AHandle: Cardinal);
    procedure DelCall(const AHandle: Cardinal);
    function IndexOfHandle(const AHandle: Cardinal): integer;
    destructor Destroy; override;
    property CallItems[Index: integer]: TCallItem read GetItem; default;
  end;

implementation

constructor TCallItem.Create(const AHandle: Cardinal);
begin
  inherited Create;
  FHandle := AHandle;
  FCall := TTApiCall.Create(FHandle);
end;

destructor TCallItem.Destroy;
begin
  FCall.Free;
  inherited Destroy;
end;

destructor TCallItems.Destroy;
begin
  while Count > 0 do
    DelItem(Count - 1);
  inherited Destroy;
end;

function TCallItems.GetItem(Index: integer): TCallItem;
var
  PItem: ^TCallItem;
begin
  PItem := Items[Index];
  Result := PItem^;
end;

procedure TCallItems.AddItem(const AItem: TCallItem);
var
  PItem: ^TCallItem;
begin
  New(PItem);
  PItem^ := AItem;
  Add(PItem);
end;

procedure TCallItems.DelItem(Index: integer);
var
  PItem: ^TCallItem;
begin
  PItem := Items[Index];
  PItem^.Free;
  Dispose(PItem);
  Delete(Index);
end;

function TCallItems.IndexOfHandle(const AHandle: Cardinal): integer;
var
  PItem: ^TCallItem;
  I: integer;
begin
  Result := -1;
  for I := 0 to Count - 1 do
  begin
    PItem := Items[I];
    if PItem^.Handle = AHandle then
      Result := I;
  end;
end;

procedure TCallItems.DelCall(const AHandle: Cardinal);
var
  Index: Integer;
begin
  Index := IndexOfHandle(AHandle);
  if Index > -1 then
    DelItem(Index);
end;

procedure TCallItems.AddCall(const AHandle: Cardinal);
var
  Item: TCallItem;
begin
  If IndexOfHandle(AHandle) = -1 then
  begin
    Item := TCallItem.Create(AHandle);
    AddItem(Item);
  end;
end;

end.
  Mit Zitat antworten Zitat
 


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 08:06 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