Erstellen Sie automatisch eine Delphi / Freepascal-Schnittstelleneinheit aus der C-Header-Datei

8

Ist es möglich, Schnittstelleneinheiten aus C-Headerdateien automatisch zu erzeugen? Insbesondere möchte ich die HDF5-Bibliothek einpacken, und es wäre großartig, wenn ich es vermeiden könnte, die Schnittstelleneinheit manuell zu schreiben.

    
andreas-h 17.10.2012, 16:44
quelle

4 Antworten

11

Das kostenlose Pascal enthält das H2PAS -Tool.

  

h2pas versucht, eine C-Header-Datei in eine Pascal-Einheit zu konvertieren. es kann   handle die meisten C-Konstrukte, die man in einer C-Header-Datei findet, und   versucht sie in ihre Pascal-Pendants zu übersetzen.

    
RRUZ 17.10.2012, 16:48
quelle
5

Bob Swart ( ) hat ein Dienstprogramm, das viele Header-Dateien konvertieren wird ) namens HeaderConvert . Ich habe es noch nie mit dem Tool @RRUZ Links verglichen, aber es ist eine andere Option.

Projekt JEDI hat auch eines; Ich habe es nie getestet. Sie können es hier finden.

    
Ken White 17.10.2012 16:50
quelle
5

Im Allgemeinen vollautomatisches Übersetzen von C-Headern in etwas anderes (das ist keine effektive Obermenge der benötigten C-Funktionalität) ist schwer bis unmöglich .

>

Das liegt daran, dass man aufgrund von Makros nicht sehen kann, wie man sie übersetzt. Makros erhalten ihre Bedeutung oft nur aus dem Kontext. Beispiel

%Vor%

aber auch (und das ist häufiger):

%Vor%

SCARYAPIMACRO ist dann oft ein Makro, das OS definiert, um die richtige Aufrufkonvention für die richtige OS / Architektur auszuwählen.

Das heißt aber nicht, dass die Werkzeuge keine echten Zeitverschalungen sind. Aber das Ergebnis ist mehr halbautomatisch, ich habe die meisten und besten Erfahrungen mit H2Pas.

Ich habe viele Windows-Header übersetzt (einschließlich FPCs commctrl, die alle paar Zeilen ein sendmessage-Makro haben).

Was ich normalerweise mache, ist ein kleines Pascal-Programm, das die Quelle linienbasiert scannt und Heuristiken benutzt, um sie in Teile zu zerlegen, die größtenteils homogen sind (alle Strukturen oder Konstanten, Makros, Prozedurdeklarationen usw.). Dann schaue ich mir die Quelle an und mache oft globale Ersatzstoffe.

Nur dann führe ich es durch den Übersetzer, der Prozess ist oft iterativ (verfeinere die Trennung, führe globale Ersetzungen durch, versuche zu übersetzen, wenn es fehlschlägt, versuche es erneut usw.).

Der Prozess erfordert leider ein gutes Verständnis von C, Pragma Zeug enthalten.

    
Marco van de Voort 17.10.2012 21:03
quelle
1

Sie können HDF5 API Header Delphi Übersetzungen, Delphi XE2 HDF5 Tabelle Testprogramm mit Quellcode und etwas modifizierten hdf5dll von meiner Seite herunterladen: Ссылка

    
SauliusR 26.11.2012 13:27
quelle

Tags und Links