Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Sinnvolle Methode zum Linken von C/C++ Code in Delphi (https://www.delphipraxis.net/155107-sinnvolle-methode-zum-linken-von-c-c-code-delphi.html)

Assarbad 8. Okt 2010 13:57

Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Moin,

würde gern eine C-Bibliothek (in Form einer .c-Datei) in ein Delphi-Projekt linken. Hat da jemand Erfahrung mit solchen Mischprojekten die keinen händischen Eingriff erfordern um bspw. die OBJ-Datei zu erzeugen die gelinkt werden soll (ob OBJ oder LIB ist mir im Endeffekt egal).

Alles was ich bisher sah, benutzte im Prinzip {$LINK ...} aber die OBJ-Datei mußte quasi "vorkompiliert" werden. Außerdem scheint mir die Dokumentation der maskierten Symbolnamen (bei dieser Methode) etwas mager, was mir immer wieder Probleme bereitet.

Danke.

Edit: es geht also speziell darum, daß ich innerhalb des Projektes wie es vom RAD Studio erstellt wird (oder innerhalb einer Projektgruppe) in die Lage versetzt werde den C-Code frisch zu kompilieren und dann in das Projekt reinzulinken.

Bernhard Geyer 8. Okt 2010 14:04

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Da Delphi keinen C-Compiler hat könnnen C/CPP-Dateien nicht direkt verwendet werden sondern nur die Zwischenkompilate ALA *.obj.

mkinzler 8. Okt 2010 14:07

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Da er wohl das RAD-Studio hat, welches einen C-Compiler beinhaltet, sollte es theroetisch möglich sein. Notfalls halt mit manueller Build-Skript Anpassung

Btw.: Welcome Back Olli.

himitsu 8. Okt 2010 14:11

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Ich kenn auch nur den Weg über die vorkompilierte OBJ.

Eventuell gibt es ja ab XE2 was, wenn die da eh einen neuen Compiler nutzen? :gruebel:

Oder nutzt das PreCompile-Script und compilierst dort die C in eine OBJ,
bzw. man bindet einen PreCompiler in sein Delphi ein, welcher die PAS/DPR parst, nach einem "eigenen"
Delphi-Quellcode:
{$CLINK xyz.c}
(oder sonstwie) sucht, die C-Datei kompiliert und den Befehl durch
Delphi-Quellcode:
{$LINK Temp.obj}
ersetzt, bevor sich der Delphi-Compilier die Datei vornimmt.


Jupp, und willkommen :hi:

Assarbad 8. Okt 2010 14:17

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Zitat:

Zitat von mkinzler (Beitrag 1054555)
Da er wohl das RAD-Studio hat, welches einen C-Compiler beinhaltet, sollte es theroetisch möglich sein. Notfalls halt mit manueller Build-Skript Anpassung

Exakt. Ein manuelles Build-Skript ist aber auch nur Frickelei, weil ich dort entweder den Pfad (zum Compiler) hartkodieren müßte oder über jede Menge ansonsten unsinnigen Code ermitteln müßte.

Zitat:

Zitat von mkinzler (Beitrag 1054555)
Btw.: Welcome Back Olli.

Danke. Dieser Name war leider schon vergeben, meines Wissens nach aber nicht an mich.

Zitat:

Zitat von himitsu (Beitrag 1054556)
Ich kenn auch nur den Weg über die vorkompilierte OBJ.

Eventuell gibt es ja ab XE2 was, wenn die da eh einen neuen Compiler nutzen? :gruebel:

Kombiniert gibt es ja den C++ Builder schon lange mit Delphi zusammen. Seltsam, daß da noch niemand sonst Bedarf angemeldet hat. Immerhin ist Build-Automatisierung eines der großen Themen in modernen Programmierparadigmen. Unabdingbar für "Continuous Integration", beispielsweise.

Zitat:

Zitat von himitsu (Beitrag 1054556)
Oder nutzt das PreCompile-Script und compiliert dort die C in einen OBJ,
bzw. man bindet einen PreCompiler in sein Dlphi ein, welcher die PAS/DPR parst, nach einem "eigenen"
Delphi-Quellcode:
{$CLINK xyz.c}
(oder sonstwie) sucht, die C-Datei kompiliert und den Befehl durch
Delphi-Quellcode:
{$LINK Temp.obj}
ersezt, bevor sich der Delphi-Compilier die Datei vornimmt.

Das klingt interessant. Kannst du mir da irgendwelche Links geben bei denen ich mich belesen kann?

Zitat:

Zitat von himitsu (Beitrag 1054556)
Jupp, und willkommen :hi:

Danke danke ;)

himitsu 8. Okt 2010 14:23

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Nee, leider nicht.

Ich hatte vor einer Weile mal einen PreCompiler für's RAD-Studio (2006 oder 2007) gesehn, welcher z.B.
Delphi-Quellcode:
_LINE_
,
Delphi-Quellcode:
_FILE_
und Ähnliches ersetzen konnte.
Ich weiß auch nicht ob/wie man da z.B. über die OTA rankommt.

Fand das recht interessant, aber leider finde ich diesen nicht mehr :(
Abgesehn von einem für D7, aber dieser läßt sich leider nicht auf neuere Delphi portieren. :cry:

Bernhard Geyer 8. Okt 2010 14:26

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Zitat:

Zitat von himitsu (Beitrag 1054562)
Ich hatte vor einer Weile mal einen PreCompiler für's RAD-Studio (2006 oder 2007) gesehn, welcher z.B.
Delphi-Quellcode:
_LINE_
,
Delphi-Quellcode:
_FILE_
und Ähnliches ersetzen konnte.
Ich weiß auch nicht ob/wie man da z.B. über die OTA rankommt.

Fand das recht interessant, aber leider finde ich diesen nicht mehr :(

Sowas hat die Jedi in den Debug-Units drin. Geht aber AFAIK nur zur Laufzeit mit entsprechenden Debug-Infos.

mkinzler 8. Okt 2010 14:33

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Zitat:

Zitat von himitsu (Beitrag 1054562)
Ich hatte vor einer Weile mal einen PreCompiler für's RAD-Studio (2006 oder 2007) gesehn, welcher z.B.
Delphi-Quellcode:
_LINE_
,
Delphi-Quellcode:
_FILE_
und Ähnliches ersetzen konnte.

Du meinst wahrscheinlich die DLangExtensions vom Andreas Hausladen (jbg)

generic 8. Okt 2010 14:38

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Du kannst übrigens nicht jeden C-Compiler nutzen, da Delphi nur Objekt-Dateien welche im OMF Format vorliegen linken kann!

Assarbad 8. Okt 2010 14:40

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Zitat:

Zitat von mkinzler (Beitrag 1054566)
Du meinst wahrscheinlich die DLangExtensions vom Andreas Hausladen (jbg)

Interessantes Projekt, danke schonmal dafür.

Zitat:

Zitat von generic (Beitrag 1054568)
Du kannst übrigens nicht jeden C-Compiler nutzen, da Delphi nur Objekt-Dateien welche im OMF Format vorliegen linken kann!

Ist bekannt.

himitsu 8. Okt 2010 15:04

AW: Sinnvolle Methode zum Linken von C/C++ Code in Delphi
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1054563)
Sowas hat die Jedi in den Debug-Units drin. Geht aber AFAIK nur zur Laufzeit mit entsprechenden Debug-Infos.

Joar, aber mit einem echten PreCompiler hätte man es halt schon früher tauschen können und da gingen dann auch andere Sachen, wie z.B. Klartext-Konstanten vor dem Kompiler zu "verschlüsseln".

Jedenfalls wurde da wohl irgendwie auf ein Ereignis reagiert, welches zum Beginn des Kompilierens ausgelöst wird.
Dann wurden die Dateien geparst und virtuell über dieses komische virtuelle Dateisystem in der OTA bearbeitet.
Erst danach ging es dann an den Delphi-Compiler.

Die Variante von Delphi 7 mußte erstmal alle Dateien speichern lassen, hat dann über einen externen "PreCompiler" die PAS bearbeitet und dieses nach dem Compilieren wieder rückgängig gemacht.


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