Ruft die Schlägerfunktion von C auf

8

Ich habe ein Racket-Modul hw.rkt:

%Vor%

Ich möchte ein C-Programm schreiben, das die Racket-Laufzeit einbettet und die Prozedur (hw) anwendet.

Es gibt Beispielcode hier , der zeigt, wie man einbetten kann die Racket-Laufzeit und eine Prozedur anwenden, die in racket/base ist, oder einen S-Ausdruck lesen und auswerten, aber ich hatte kein Glück, diesen Code zu ändern, um Zugriff auf die Prozedur (hw) zu ermöglichen.

Diese Seite scheint zu sagen, dass es möglich ist tun, was ich tun möchte, indem Sie zuerst hw.rkt zu hw.c mit raco ctool --c-mods kompilieren, und das funktioniert gut, wenn ich es versuche, aber ich kann immer noch nicht auf die Prozedur (hw) zugreifen.

Wenn jemand ein vollständiges Beispielprogramm posten könnte oder einfach beschreiben würde, welche C Funktionen zu verwenden sind, wäre ich sehr dankbar. Von dort kann ich den Rest herausfinden.

Bearbeiten, um Beispiele für Dinge zu geben, die ich ausprobiert habe.

Ich habe das Beispielprogramm modifiziert, um das Bit "Argumente der Befehlszeile auswerten" zu entfernen und direkt zur REPL zu springen, damit ich experimentieren kann. Also (mit "hw.c" das Ergebnis der Ausführung von raco ctool --c-mods hw.c ++libs racket/base hw.rkt ):

%Vor%

Dinge, die nicht funktionieren (und ihre Fehlermeldungen):

Aufruf von (hw) von der REPL

%Vor%

((dynamic-require 'hw 'hw))

%Vor%

((dynamic-require "hw.rkt" 'hw))

%Vor%

Bearbeiten des Beispielcodes

%Vor%

Fehler:

%Vor%

(Der segfault war wahrscheinlich, weil ich den Wert von 'v' nicht überprüft habe, bevor ich scheme_namespace_require it versucht habe.)

Bearbeiten des Beispielcodes mk. 2

%Vor%

Fehler:

%Vor%

(re: segfault: wie oben)

Bearbeiten des Beispielcodes mk. 3

%Vor%

(wie oben)

Bearbeiten des Beispielcodes mk. 4

%Vor%

(wie mk. 1, speichern Sie den segfault)

Bearbeiten des Beispielcodes mk. 5

%Vor%

Fehler:

%Vor%     
Arandur 29.03.2016, 14:14
quelle

1 Antwort

3

Beantwortet von Matthew Flatt hier . Bei der Verwendung von dynamic-require musste ich den Namen des Moduls zweimal angeben, nicht einmal. Danke an Dr. Flatt für ihre Hilfe.

    
Arandur 31.03.2016 13:02
quelle

Tags und Links