2015-10-18 12 views
5

Ich versuche, die Squeak Foreign Function Interface zu verwenden. Alle Informationen ich in der Lage war zu finden scheint nicht auf die neue Squeak 5,0 anzuwenden, denn wenn ich zB versuchen:Was ist die Syntax für die Squeak FFI in der neuen Squeak (5.0)

add: a to: b 
    " (int) add (int a, int b) ; " 
    < cdecl: int 'add' (int a, int b) module: 'mydll'> 
    ^self externalCallFailed 

, die von this page ‚s abgeleitet:

apiInvalRect: aRect 
    " (void) InvalRect (const Rect &star; badRect) ; " 
    < cdecl: void 'InvalRect' (MacRect) module: 'InterfaceLib'> 
    ^self externalCallFailed.  

dann bekomme ich die Fehler, dass es eine > direkt nach der < erwartet.

(Ich bin mit Squeak 5.0 unter Windows mit SqueakFFIPrims.bundle in seinen Ressourcen-Verzeichnis.)

+0

FFI ist standardmäßig im Bild nicht installiert ist, haben Sie versucht, alles zu es installieren? –

+0

@ aka.nice Es ist nicht? Ich habe nur gesehen, dass mein Bild ein SqueakFFIPrims.bundle in seinem Verzeichnis hat und dass ich keine der Webseiten, die ich besucht habe, irgendwelche Informationen hatte, dass es installiert werden musste (und wie?), Auch nicht in squeakMap. Ich würde mich sehr freuen, wenn Sie uns sagen, wie Sie es installieren und ich hoffe, dass auch der Syntaxfehler löst (ich denke, das Plugin ändert die Parsing-Regeln auch?) – ben

+0

Ich laden in der Regel die neuesten FFI-Pakete mit Monticello von http: // source .squeak.org/FFI.html das wäre 'FFI-Kernel-dtl.28.mcz' 'FFI-Tests-EstebanLorenzano.8.mcz' 'FFI-Beispiele-ar.1.mcz'. Es muss ein Installer-Skript geben, das die gleiche Arbeit macht, aber ich weiß nicht, wo ich es finden kann, vielleicht google ... –

Antwort

3

Sie müssen zuerst installieren FFI im Bild über Monticello.

Das FFI-Paket befinden sich in http://source.squeak.org/FFI.html

Sie müssen zuerst, dann 'FFI-Kernel' 'FFI-Pools' installieren. Dann können Sie 'FFI-Tests' und 'FFI-Beispiel' laden.

Sobald FFI in Bild installiert ist, wäre die korrekte Syntax so etwas wie diese:

add: a to: b 
    " (int) add (int a, int b) ; " 
    <cdecl: long 'add' (long long) module: 'mydll'> 
    ^self externalCallFailed 

Sie haben nicht die Parameternamen angeben - sie werden auf die gleiche Position wie die smalltalk Methode implizit nehmen.

Sie müssen int durch long ersetzen - es ist das gleiche auf unterstützten 32-Bit-Plattformen.

EDIT das FFI-Paket in Squeak zu laden, Sie schreiben und ausführen können (do it) dies in einem Arbeitsbereich:

(Installer repository: 'http://source.squeak.org/FFI') 
    install: 'FFI-Pools'; 
    install: 'FFI-Kernel'; 
    install: 'FFI-Tests'; 
    install: 'FFI-Examples'. 
+0

Works. Danke noch einmal. – ben