Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi {M+} Vererbung (https://www.delphipraxis.net/103658-%7Bm-%7D-vererbung.html)

Neutral General 19. Nov 2007 12:31


{M+} Vererbung
 
Hi,

Habe gerade eine Klasse in einer Unit der ich {M+} verpasst habe. Wenn ich nun eine Klasse von dieser Klasse ableite dann muss ich dieser aber wieder M+ geben. Bei TPersistent geht das doch anscheined auch irgendwie oder mach ich was verkehrt?

Gruß
Neutral General

sirius 19. Nov 2007 12:33

Re: {M+} Vererbung
 
Da geht es nicht nur irgendwie. Das ist direkt so vorgesehen. Irgendetwas machst du da verkehrt :gruebel:

Edit: Steht ja auch in der Hilfe.
Und bei der Entwicklung dessen habe ich es auch genutzt.

Vielleicht dieser Hinweis auf Forward-Deklarationen?

Neutral General 19. Nov 2007 14:54

Re: {$M+} Vererbung
 
Hi,

Das ganze sieht so aus.

Delphi-Quellcode:
unit NVCLForms;

{$M+}
  TNVCLForm = class(TNVCLControl)
    //...
  end;
{$M-}

Delphi-Quellcode:
unit Unit1;

uses NVCLForms;

type

  TForm1 = class(TNVCLForm)
    procedure Wasweißich(Sender: TBlubb);
  private
      //...
  public
  end;
procedure Wasweißich(Sender: TBlubb);

wird nicht per RTTI gespeichert. Erst wenn ich {$M+} hinzufüge klappts.

Gruß
Neutral General

Neutral General 20. Nov 2007 12:44

Re: {M+} Vererbung
 
Kann mir keiner helfen ? :|

sirius 20. Nov 2007 13:08

Re: {M+} Vererbung
 
Ich kann dir soviel sagen, dass dies hier funktioniert:
Delphi-Quellcode:
unit Unit2;

interface

{$M+}
type TTest=class(TObject);
{$M-}

implementation

end.
Delphi-Quellcode:
unit Unit1;

interface

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

type TTest2=class(TTest)
      procedure Wasweissich(x:integer);
      procedure wasweissichnoch;
end;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TTest2.Wasweissich(x:integer);
begin
  showmessage('Anzahl Methoden: '+inttostr(x));
end;
procedure TTest2.Wasweissichnoch;
begin
  showmessage('nix');
end;


procedure TForm1.Button1Click(Sender: TObject);
var x:TTest2;
    p:pointer;
    count:pword;
begin
  x:=TTest2.Create;
  p:=ppointer(x)^;
  count:=ppointer(integer(p)+vmtmethodtable)^;
  x.Wasweissich(count^);
  x.free;
end;

end.

Neutral General 20. Nov 2007 14:09

Re: {M+} Vererbung
 
Hi,

Ok ich muss auch bei forward deklarationen {$M+} schreiben...

Delphi-Quellcode:
type
  {$M+}
  TNVCLForm = class;
  {$M-}

  // ..

  {$M+}
  TNVCLForm = class(TNVCLControl)
   //..
  end;
  {$M-}
Wobei es eben auch zwischendurch ganz seltsame Fehler und Erscheinungen gab die es aber jetzt nichtmehr gibt komischerweise.. :gruebel:

sirius 20. Nov 2007 14:36

Re: {M+} Vererbung
 
Zitat:

Zitat von Neutral General
Ok ich muss auch bei forward deklarationen {$M+} schreiben...

Zitat:

Zitat von sirius
Vielleicht dieser Hinweis auf Forward-Deklarationen?

:zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 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