AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Übersetzen von pas nach hpp, dabei cpp Kommentare übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzen von pas nach hpp, dabei cpp Kommentare übergeben

Ein Thema von mensch72 · begonnen am 6. Feb 2008 · letzter Beitrag vom 7. Feb 2008
Antwort Antwort
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#1

Übersetzen von pas nach hpp, dabei cpp Kommentare übergeben

  Alt 6. Feb 2008, 21:20
wenn man pas-Dateien vom C-Compilter übersetzen und nutzen möchte, und man Quelltext in c in die Pascal Datei einbinden möchte, an entsprechender Stelle, wie muss man das da deklarieren?

Delphi-Quellcode:
type
MyDateTime = packed record
private
 FDateTime : Double;

public
  function ToDateTime : TDateTime;
  procedure FromDateTime(Value : TDateTime);

{$IFDEF TEST}
    
   MyDateTime& __fastcall operator =(const TDateTime Value) {this->FromDateTime(Value); return(*this);};
   __fastcall operator TDateTime()   {return (this->ToDateTime());   }

{$ENDIF}

end;

Erzeute Hpp Datei sollte dann so aussehen:

Delphi-Quellcode:
struct MyDateTime
#pragma pack(push,1)
struct MyDateTime
{
private:
   double FDateTime;

public:
   System::TDateTime __fastcall ToDateTime(void);
   void __fastcall FromDateTime(System::TDateTime Value);

            MyDateTime& __fastcall operator =(const TDateTime Value) {this->FromDateTime(Value); return(*this);}
;
            __fastcall operator TDateTime()   {return (this->ToDateTime());   }

} ;

#pragma pack(pop)

Oder aber in einem anderen Anwendungsfall, wenn ich einfach Kommentare auch mit übernehmen möchte?
Welche Compileranweisung nimmt man da. HPPEMIT funktioniert nur für den Dateianfang ...

vielen Dank!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Übersetzen von pas nach hpp, dabei cpp Kommentare überge

  Alt 7. Feb 2008, 00:17
1. Von Pascal zu einem C Header geht nicht. Es können nur C++ Header erzeugt werden.
2. C Quellen können nicht von Pascal verwendet werden. Ausnahme: Du compilierst deine .C Dateien zu Objekts und definierst die Procedure als external unter Pascal und bindest die .OBJ mit der "Link" Compileranweisung {$L xxx.obj} mit ein.
3. Die $HPPEMIT Anweisungen werden genau dort eingefügt wo sie in der Quell-PAS stehen. Da gibt es keine Beschränkung von wegen Dateianfang o.ä.
4. Wo liegt das eigentliche Problem? Anscheinend hast du die Pascal Quelle ja schonmal in ein C++ BCB Projekt reingezogen und dir das HPP erstellen lassen.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#3

Re: Übersetzen von pas nach hpp, dabei cpp Kommentare überge

  Alt 7. Feb 2008, 22:19
Zitat von Muetze1:
1. Von Pascal zu einem C Header geht nicht. Es können nur C++ Header erzeugt werden.
2. C Quellen können nicht von Pascal verwendet werden. Ausnahme: Du compilierst deine .C Dateien zu Objekts und definierst die Procedure als external unter Pascal und bindest die .OBJ mit der "Link" Compileranweisung {$L xxx.obj} mit ein.
3. Die $HPPEMIT Anweisungen werden genau dort eingefügt wo sie in der Quell-PAS stehen. Da gibt es keine Beschränkung von wegen Dateianfang o.ä.
4. Wo liegt das eigentliche Problem? Anscheinend hast du die Pascal Quelle ja schonmal in ein C++ BCB Projekt reingezogen und dir das HPP erstellen lassen.
zu 1: nicht gewollt
zu 2: nicht gewollt

zu 3:
{$HPPEMIT 'abc'} erscheint immer am Anfang des erzeugten hpp Files, und nicht in der Klasse. (leider)
Deswegen die Frage, ob es noch einen anderen Compilerschalter dafür gibt.

zu 4: Überladene Operatoren von Records in Delphi2006/2007 werden nicht ins HPP übernommen und müssten nachträglich seperat in cpp Syntax im hpp von Hand ergänzt werden.
(schlecht wäre eine Neucompilierung des pas Files, da alle Handänderungen im hpp wieder verschwinden)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Übersetzen von pas nach hpp, dabei cpp Kommentare überge

  Alt 7. Feb 2008, 23:13
Zitat von mensch72:
zu 3:
{$HPPEMIT 'abc'} erscheint immer am Anfang des erzeugten hpp Files, und nicht in der Klasse. (leider)
Deswegen die Frage, ob es noch einen anderen Compilerschalter dafür gibt.
Nein, es gibt keine weitere Möglichkeit. Und er fügt die nicht am Anfang der Datei ein, aber vor dem aktuellen Deklarationsblock der behandelt wird. Sprich: HPPEMIT innerhalb von Records, Klassen, etc werden vor dieser in die hpp geschrieben. Aber ausserhalb dessen erscheinen die HPPEMIT an der Stelle wie in der PAS (das war das, was ich vorhin meinte...). Du kannst niemals innerhalb einer Struktur oder Klasse etwas per HPPEMIT einfügen etc. Allerhöchstens per EXTERNALSYM Methoden und Elmente des Records vor der Übertragung ins HPP ausschließen. Einzige Möglichkeit besteht darin, die Klasse komplett per HPPEMIT zu definieren und die Originalübertragung per EXTERNALSYM verhindern.

Zitat von mensch72:
zu 4: Überladene Operatoren von Records in Delphi2006/2007 werden nicht ins HPP übernommen und müssten nachträglich seperat in cpp Syntax im hpp von Hand ergänzt werden.
(schlecht wäre eine Neucompilierung des pas Files, da alle Handänderungen im hpp wieder verschwinden)
Da Records mit Methoden wie auch Properties sind grundsätzlich nicht zur Nutzung zu empfehlen, da Borland bei diesem neuen Feature gerade im Zusammenspiel C++ und Pascal nichts wirklich getestet hat. Siehe die folgenden QC Einträge von mir (nach denen habe ich es aufgegeben mich weiter damit zu beschäftigen, es bringt nichts). Diese Aussagen beziehen sich bislang auf BDS2006.

QC53958: using a set definition in pascal record including getter/setter let the C++ linker fail
QC53956: using HPP struct with methods will result in ILI2119
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:42 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