AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Android: Grenzen objektorientierter Programmierung?
Thema durchsuchen
Ansicht
Themen-Optionen

Android: Grenzen objektorientierter Programmierung?

Ein Thema von Klaus Budmiger · begonnen am 26. Jul 2014 · letzter Beitrag vom 28. Jul 2014
Antwort Antwort
Seite 1 von 2  1 2      
Klaus Budmiger

Registriert seit: 6. Mär 2008
7 Beiträge
 
Delphi XE6 Professional
 
#1

Android: Grenzen objektorientierter Programmierung?

  Alt 26. Jul 2014, 17:53
Nachfolgend ein Stück simplen Code das in Win32 problemlos geht aber in Android zu einem Fehler führt.
Hier das Vorgehen:

Ich bilde eine einfache Klasse mit einer Variable vom Typ String:
type
TMyString = class (TObject)
Text: String;
end;

Ich fülle eine TList mit einer Anzahl Instanzen:
List.Clear;
for i:=0 to 5 do
begin
MyString := TMyString.Create;
MyString.Text := IntToStr (i);
List.Add(MyString);
end;

Dann fülle ich die Werte aus der Liste in eine Listbox:
var i: Integer;
s: string;
begin
ListBox1.Clear;
for i:=0 to List.Count-1 do
begin
{in Android wird das nicht gelesen und führt zu einem Fehler:}
s := TMyString(List.Items[i]).Text;
ListBox1.Items.Add(s);
end;
end;

Kann mir jemand erklären warum geht dieser simpler Code in Android nicht?
Der ganze Code ist beigefügt.
Angehängte Dateien
Dateityp: pas Unit1.pas (1,4 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 26. Jul 2014, 17:56
Schade, dass der Fehler so geheim zu sein scheint, dass Du ihn hier nicht darlegen darfst.
  Mit Zitat antworten Zitat
Klaus Budmiger

Registriert seit: 6. Mär 2008
7 Beiträge
 
Delphi XE6 Professional
 
#3

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 26. Jul 2014, 18:15
Pardon, natürlich:

Der Fehler im Android Tablet ist ein "Access violation at address ...." Fehler.
Wenn der Code ab der Zeile
s := TMyString(List.Items[i]).Text;
schrittweise verfolgt wird,

- dann ist die Anzahl der Einträge (List.Count) korrekt
- im Inspektor wird der Wert für den String s angegeben : <error reading addres 0x0: No error>
- wenn der Code weiterverfolgt wird, dann wird in der nächsten Schleife ein Debugger Exception Notifocation Fenster geöffnet mit der Meldung
"Project Project1.apk raised an exception class Segmenatation fault (11)." mit den Knöpfen "Break", "Continue", "Help".
Die Help Taste ist dieses Mail
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
509 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 26. Jul 2014, 18:32
Wo hast du die Liste instanziert?

Edit: sry code is ja da, schaus mir gleich an ^^
Milos
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 26. Jul 2014, 18:42
Auf Android greift ARC. Und da eine TList nicht typisiert ist und nur Pointer speichert, sorgt sie nicht dafür, dass deine TMyString Objekte am Leben bleiben. D.h. beim Verlassen der Methode bzw beim erneuten Zuweisen auf die MyString Variable, wo du die TList befüllst, sind sie schon wieder freigegeben worden. Demnäch stehen in der Liste bloß noch Pointer auf nicht mehr gültigen Speicher.

Um das zu lösen, würde ich für beide Plattformen vorschlagen, eine TList<TMyString> (oder auch direkt TList<string> oder TStringList) zu benutzen.
Hier auch drauf achten, dass du auf Windows keine Memoryleaks verursachst und deine TMyString Instanzen wieder richtig frei gibst, wenn die liste freigegeben wird (würde gehen, wenn du TObjectList<TMyString> benutzt)

Die findest du in der Unit System.Generics.Collections.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Klaus Budmiger

Registriert seit: 6. Mär 2008
7 Beiträge
 
Delphi XE6 Professional
 
#6

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 27. Jul 2014, 22:16
Herzlichen Dank für die Antwort. Das macht Sinn. Ich werde es so umsetzen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 28. Jul 2014, 06:03
Eine Verständnisfrage: ARC = Automatic Reference Counting. Bedeutet das in der Konsequenz, das ich mir um die Freigabe von Objekten keinen Kopf mehr machen muss?

Und wenn das so ist, warum ist das dann nur bei Android so?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 28. Jul 2014, 07:17
Weil dort der neue Nextgen-Compiler benutzt wird. Der alte kann das nicht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 28. Jul 2014, 07:42
Also ist die Konsequenz, das Quellcode derzeit nicht zwingend kompatibel ist (wenn man old-style mit Pointern arbeitet).

Ferner deutet 'NextGen' darauf hin, dass das nur ein vorübergehender Zustand ist, da man bei 'next generation' davon ausgehen kann, das ein derartiger Compiler bzw. eine Spracherweiterung/veränderung auch für Windows umgesetzt wird, oder will man bei Emba etwa zweigleisig fahren?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Android: Grenzen objektorientierter Programmierung?

  Alt 28. Jul 2014, 07:52
Zitat:
Also ist die Konsequenz, das Quellcode derzeit nicht zwingend kompatibel ist (wenn man old-style mit Pointern arbeitet).
Bei etwas unglücklicher Programmierung kann das passieren. "sauberer" Code stellt aber kein Problem dar.

Zitat:
Ferner deutet 'NextGen' darauf hin, dass das nur ein vorübergehender Zustand ist, da man bei 'next generation' davon ausgehen kann, das ein derartiger Compiler bzw. eine Spracherweiterung/veränderung auch für Windows umgesetzt wird, oder will man bei Emba etwa zweigleisig fahren?
Es ist geplant, dass der neue auf LLVM basierende Compiler auch für Win32/Win64 zum Einsatz kommt. Bisher unterstützt er aber nur ARM für iOS und Android.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 13:25 Uhr.
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