AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Get(anyPointer) Verständnisfrage

Ein Thema von Nintendo · begonnen am 29. Apr 2013 · letzter Beitrag vom 2. Mai 2013
 
Nintendo

Registriert seit: 16. Feb 2009
82 Beiträge
 
#1

Get(anyPointer) Verständnisfrage

  Alt 29. Apr 2013, 14:32
Hallo,

ich experimentiere grad mit der Übergabe von Zeigern anstele von VAR Parametern und frage mich, wie ich das folgende erreichen kann:

Delphi-Quellcode:
procedure GetThis(pp: Pointer);
begin
  pp := value;
end;
Wenn ich die Prozedur selber definieren kann, könnte ich auch das hier schreiben:

Delphi-Quellcode:
procedure GetThis(var pp: Pointer);
begin
  pp := value;
end;
Wenn ich aber ein Interface nutze, sieht die Sache schon anders aus.

Wie erreiche ich dann, das auch die obere Funktion den Wert übergibt.

Gibt es da vielleicht eine Compiler-Option? Wenn ja, welche?

Hier ist noch ein Testbeispiel zur Verdeutlichung, was ich meine:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    lblShowString: TLabel;
    lblShowPChar: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FPChar: PChar;
    FString: String;
  public
    { Public-Deklarationen }
    procedure GetPChar(this: PChar);
    procedure GetString(this: String);
    procedure GetStringByReference(var this: String);
    procedure GetPCharByReference(var this: PChar);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var PCh: PChar; Str: String;
begin
  FString := Edit1.Text;
  FPChar := PChar(FString);
  GetStringByReference(Str);
  lblShowString.Caption := Str;
  GetPCharByReference(PCh);
  lblShowPChar.Caption := StrPas(PCh);
end;

procedure TForm1.GetPChar(this: PChar);
begin
  this := FPChar;
end;

procedure TForm1.GetPCharByReference(var this: PChar);
begin
  this := FPChar;
end;

procedure TForm1.GetString(this: String);
begin
  this := FString;
end;

procedure TForm1.GetStringByReference(var this: String);
begin
  this := FString;
end;

end.
Wenn ich hier GetStringByReference und GetPCharByReference aufrufe, dann klappt die Parameterübergabe.

Wenn ich jedoch die anderen beiden Prozeduren verwende, dann gibt

GetString() gar nichts aus, Wert bleibt komplett unverändert, wie ich das auch bei CallByValue erwarte.

GetPChar() gibt Datenmüll aus.

Wie kann ich nun Pointer in der Form wie in GetPChar() erhalten?

Wie gesagt, wenn ich ein Interface verwenden will/muss, dann kann ich die Deklaration nicht für mich passend ändern, das geht nur bei komplett eigener Defintion.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:54 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