2015-10-18 8 views
5

Próbuję użyć interfejsu funkcji zakłóceń Squeak. Wszystkie informacje udało mi się znaleźć, nie wydaje się zastosowanie do nowych Squeak 5,0 ponieważ przy próbie npJaka jest składnia Squeak FFI w nowym Squeaku (5.0)

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

który pochodzi od this page Add

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

następnie otrzymuję błąd, że oczekuje on > zaraz po <.

(Używam Squeak 5.0 w systemie Windows z SqueakFFIPrims.bundle w swoim katalogu zasobów.)

+0

FFI nie jest instalowany domyślnie w obrazie, czy próbować niczego Zainstaluj to? –

+0

@ aka.nice To nie jest? Widziałem tylko, że mój obraz ma w swoim katalogu SqueakFFIPrims.bundle i że żadna z odwiedzonych przeze mnie stron nie ma informacji, że musiała zostać zainstalowana (i jak?), Również nie w squeakMap. Byłbym bardzo zadowolony, gdybyś nam powiedział, jak go zainstalować i mam nadzieję, że rozwiąże on również błąd składni (domyślam się, że wtyczka zmienia również reguły parsowania?). – ben

+0

Zwykle ładuję najnowsze pakiety FFI z Monticello z http: // source .squeak.org/FFI.html to "FFI-Kernel-dtl.28.mcz" "FFI-Tests-EstebanLorenzano.8.mcz" "FFI-Examples-ar.1.mcz". Musi istnieć jakiś skrypt instalatora, który wykonuje tę samą pracę, ale nie pamiętam, gdzie ją znaleźć, może zapytam google ... –

Odpowiedz

3

Najpierw należy zainstalować FFI w obrazie poprzez Monticello.

Pakiet FFI znajdują się http://source.squeak.org/FFI.html

Musisz zainstalować 'FFI-baseny', potem 'FFI-kernel'. Następnie możesz załadować "FFI-Tests" i "FFI-Example".

Po FFI jest zainstalowane w obrazie, poprawna składnia byłoby coś takiego:

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

nie podasz nazwy parametrów - są one domyślnie przyjmując tę ​​samą pozycję jako metody Smalltalk.

Musisz zastąpić int long - to samo na obsługiwanych platformach 32-bitowych.

EDIT załadować pakiet FFI w Squeakiem można wpisać i wykonać (zrobić) to w obszarze roboczym:

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

Działa. Dzięki jeszcze raz. – ben

Powiązane problemy