AGB  ·  Datenschutz  ·  Impressum  







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

Pointer Problem

Ein Thema von WorstNightmare · begonnen am 30. Sep 2009 · letzter Beitrag vom 30. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Pointer Problem

  Alt 30. Sep 2009, 16:09
Hallo,

die Pointer machen mir mal wieder zu schaffen:

Delphi-Quellcode:
procedure TformEinstellungen.UpdateMacroLV(Mac: TMacro);
var
  Cmd: TMacroCommand;
begin
  LVMacro.Items.BeginUpdate;
  try
    LVMacro.Clear;

    // Alles wieder rein
    for Cmd in Mac.Commands do
      with LVMacro.Items.Add do
      begin
        Caption := frmMacro.cbCmdType.Items[Byte(Cmd.CmdType)];
        SubItems.Add(ArrayToStr(Cmd.Parameters));

        Data := @Cmd; // <--- ?
      end;
  finally
    LVMacro.Items.EndUpdate;
  end;
end;
So, schön und gut. Versuche ich später die Daten abzufragen
Cmd := TMacroCommand(LVMacro.Selected.Data^); knallts.

Vorher wurde extra immer für ein PMacroCommand Speicher reserviert und die Werte dann eingetragen, allerdings ist jeder Command wie man sieht Teil einer TList<TMacroCommand> und .Remove funktioniert nicht, wenn es eben nicht genau das selbe Objekt ist (wer hätte das gedacht...).

Warum funktioniert denn das schon wieder nicht? Diese Pointer machen mich noch wahnsinnig...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Pointer Problem

  Alt 30. Sep 2009, 16:13
Das @ vor dem cmd muss weg.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Pointer Problem

  Alt 30. Sep 2009, 16:14
Das geht nicht, TMacroCommand ist ja kein Pointer, TListItem.Data aber schon.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Pointer Problem

  Alt 30. Sep 2009, 16:15
Wenn TMacroCommand ne Klasse ist, dann schon. Bei nem Record würds stimmen (d.h. ein @ müsste davor)

Aber ich tippe darauf, dass das Problem ist, dass du einen Zeiger auf ne lokale Variable speicherst, der nach dieser Methode nichtmehr gültig ist.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#5

Re: Pointer Problem

  Alt 30. Sep 2009, 16:16
Es ist ein Record.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Pointer Problem

  Alt 30. Sep 2009, 16:16
Zitat:
Aber ich tippe darauf, dass das Problem ist, dass du einen Zeiger auf ne lokale Variable speicherst, der nach dieser Methode nichtmehr gültig ist.
Edit: Versuch mal testweise Cmd global zu definieren.

Edit: Ich glaube ich rede Müll
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#7

Re: Pointer Problem

  Alt 30. Sep 2009, 16:20
Aber wie kann ich das ändern? Direkt auf den Record in der Liste pointen kann ich ja auch nicht (Variable erwartet), und ich kann nicht irgendwie New() benutzen wie früher, da ich ja diesen Record will und nicht irgendeine Kopie (damit TList<>.Remove geht).
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Pointer Problem

  Alt 30. Sep 2009, 16:20
Ach ich würde es evtl mal so probieren (Weiß aber nich obs nen Unterschied macht):

Delphi-Quellcode:
type
  PMacroCommand = ^TMacroCommand;


Cmd := PMacroCommand(LVMacro.Selected.Data)^;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#9

Re: Pointer Problem

  Alt 30. Sep 2009, 16:23
Ist glaube ich so ziemlich dasselbe, knallt immer noch
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

Re: Pointer Problem

  Alt 30. Sep 2009, 16:24
Es sollte mit New() gehen.

Also nen Pointer auf den Record deklarieren, New() verwenden, befüllen eun in der Liste speichern.

Alternativ eine Klasse nehmen
  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 06:51 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