Приложение: FFI для держателя целочисленной стоимости

Вот как использовать FFI для чего-то вроде:

"int get_by_filling_pointer(int *value);"
FFIExternalValueHolder subclass: DemoFFIIntegerValue
DemoFFIIntegerValue>>typeDecl 
   ^ 'int'
FFILibrary subclass: DemoFFILibrary
DemoFFILibrary>>apiGetValue: valueHolder
   ^ self ffiCall: #( int get_by_filling_pointer(DemoFFIIntegerValue valueHolder) )
Object subclass: DemoFFIThing
DemoFFIThing>>getViaValueHolder 
   | vh |  
   vh  := DemoFFIIntegerValue new. 
   ((DemoFFILibrary uniqueInstance apiGetValue: vh) = 1)  
      ifFalse: [ DemoFFIError signal: 'bummer' ]
      ifTrue: [  ^ vh value  ]
Error subclass: DemoFFIError

Работа с «int *value» в функции C не очевидна в Smalltalk. Ключевым моментом является использование специального класса под названием #FFIExternalValueHolder, который представляет собой способ эмуляции указателей в Smalltalk.