$M+ Mode und published

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

$M+ Mode und published

Beitrag von monta »

Code: Alles auswählen

Error: Only classes which are compiled in $M+ mode can be published

Code: Alles auswählen

type
  // data module to access to a TXMLDocument and TIdHTTP
  TdmClient = class(TComponent)
    xmlDoc: TXMLDocument;
      httpClient: TIdHTTP;  //<< da liegt das Problem
  private
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
Folgende Seite erklärt ja im Prinziep, wo das Problem liegt, es fehlt, so wie ich das rauslese RTTI, was nicht einkompiliert wurde.
http://www.freepascal.org/docs-html/prog/progsu44.html" onclick="window.open(this.href);return false;

Aber wie beseitigt man nun am günstigsten das Problem?

Die Komponente stammt aus den Indy. Man könnte natürlich die Indys mit M+ durchjagen, aber das erzeugt erstmal neue Fehler. Außerdem änder ich ungern Sachen direkt am Indy-Source, das erschwert nur die Weitergabe.

{$mode delphi} übergeht das Problem, aber wie lässt sich dies im FPC-Mode realisieren?
Johannes

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: $M+ Mode und published

Beitrag von mse »

Indy ist Delphi code? Dann könntest du die Indy units doch mit -Mdelphi Kommandozeilen-Parameter kompilieren? Seltsam ist, dass TIdHTTP von TComponent abstammt, welches auf jeden Fall RTTI besitzen sollte.

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: $M+ Mode und published

Beitrag von martin_frb »

Die frage ist soll httpClient den published sein? oder wuerde es genuegen den in der public (oder private) section aufzufuehren?
(alles zwischen "class()" and dem ersten "private" oder anderem class-section) ist published)

TdmClient = class(TComponent)
xmlDoc: TXMLDocument;
private
httpClient: TIdHTTP; //<< da liegt das Problem
...

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: $M+ Mode und published

Beitrag von monta »

mse hat geschrieben:Indy ist Delphi code? Dann könntest du die Indy units doch mit -Mdelphi Kommandozeilen-Parameter kompilieren? Seltsam ist, dass TIdHTTP von TComponent abstammt, welches auf jeden Fall RTTI besitzen sollte.
Vielleicht hab ich dich auch falsch verstanden, aber die Indy-Dateien für die Lazarus/FPC-Version includieren doch alle schon entsprechende Defines, unter anderem auch Mode Delphi:

Code: Alles auswählen

// FPC (2+)
 
{$IFDEF FPC}
  {$DEFINE USEINLINE}
  {$DEFINE USECLASSINLINE}
  {$MODE Delphi}
//...
Indy selbst läuft ja auch bestens, es gibt halt nur scheinbar keine RTTI wenn man von Indy selbst etwas ableiten will. Auch, wie du schon gesagt hast, wenn man sich über etliche Zwischenschritte zu TComponent durchhangeln kann, von welchem TIdHTTP abstammt.
martin_frb hat geschrieben:Die frage ist soll httpClient den published sein? oder wuerde es genuegen den in der public (oder private) section aufzufuehren?
(alles zwischen "class()" and dem ersten "private" oder anderem class-section) ist published)
Danke, das war mein Fehler. Privat langt nicht, da es quasi als Datenmodul eingebunden werden soll, aber mit public geht es und das ist völlig aussreichend, da der Typ eh nur intern verwendet wird.
Ich hab das so von der ehemals Delphi-Komponente übernohmen und mir war gar nicht bewusst, das alles, was da oben steht (unnützer) Weise published ist. Danke für den Hinweis. (Obwohl man eigentlich durch die Fehlermeldung drauf kommen müsste :oops: )
Johannes

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: $M+ Mode und published

Beitrag von martin_frb »

monta hat geschrieben:
martin_frb hat geschrieben:Die frage ist soll httpClient den published sein? oder wuerde es genuegen den in der public (oder private) section aufzufuehren?
(alles zwischen "class()" and dem ersten "private" oder anderem class-section) ist published)
Ich hab das so von der ehemals Delphi-Komponente übernohmen und mir war gar nicht bewusst, das alles, was da oben steht (unnützer) Weise published ist. Danke für den Hinweis. (Obwohl man eigentlich durch die Fehlermeldung drauf kommen müsste :oops: )
Ich bin da nur draufgekommen, weil ich selbst (vor gar nicht alzulanger Zeit) mal ein paar Stunden ueber die gleiche FehlerMeldung nach gedacht hatte.

Antworten