2015-10-18 36 views
5

Sto tentando di utilizzare l'interfaccia per le funzioni estranee Squeak. Tutte le informazioni sono stato in grado di trovare non sembra applicare alla nuova Squeak 5.0 perché quando provo ad esempio:Qual è la sintassi per Squeak FFI nel nuovo Squeak (5.0)

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

che è derivato da this page 's:

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

tanto sono il errore che si aspetta un > subito dopo il <.

(sto usando Squeak 5.0 su Windows con SqueakFFIPrims.bundle nella sua directory delle risorse.)

+0

FFI non è installato di default nell'immagine, hai provato di tutto per installarlo? –

+0

@ aka.nice Non lo è? Ho visto solo che la mia immagine ha uno SqueakFFIPrims.bundle nella sua directory e che nessuno dei siti web che ho visitato aveva informazioni che dovevano essere installate (e come?), Anche non in squeakMap. Sarei molto felice se ci diresti come installarlo e spero che risolva anche l'errore di sintassi (suppongo che il plugin modifichi anche le regole di analisi) – ben

+0

Di solito carico gli ultimi pacchetti FFI con Monticello da http: // source .squeak.org/FFI.html che sarebbe 'FFI-Kernel-dtl.28.mcz' 'FFI-Tests-EstebanLorenzano.8.mcz' 'FFI-Esempi-ar.1.mcz'. Ci deve essere qualche script di installazione che faccia lo stesso lavoro, ma non ricordo dove trovarlo, magari chiedere a google ... –

risposta

3

Innanzitutto è necessario installare FFI nell'immagine, via Monticello.

Il pacchetto FFI si trovano a http://source.squeak.org/FFI.html

È necessario installare 'FFI-Pools', poi 'FFI-kernel'. Quindi puoi caricare 'FFI-Test' e 'FFI-Esempio'.

Una volta FFI è installato in immagine, la sintassi corretta sarebbe qualcosa di simile:

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

Non si specifica i nomi dei parametri - sono implicitamente assumendo la stessa posizione come il metodo di Smalltalk.

Devi sostituire int a lungo - è lo stesso sulle piattaforme a 32 bit supportate.

EDIT per caricare il pacchetto di FFI in Squeak, è possibile digitare ed eseguire (farlo) questo in uno spazio di lavoro:

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

Works. Grazie ancora. – ben