I think in that case you need to pass an instance of FFIExternalValueHolder.
yes.
you can take the test FFIExternalValueHolderTests>>testCall as an example.
But since it uses anonymous classes it might require a better explanation, there is the class comment, but basically, you do this:
1) Declare a class variable
MyClass class>>initialize
INT_PTR := FFIExternalValueHolder ofType: ���int���.
as a larger explanation, this will create an anonymous subclass to keep ���int��� values, than later you can use as a type in your function call. Some people would call this obscure, but is a good way of solving this problem (I adopted it from old NB).
If you want to have a named class instead an anonymous class, you can just subclass FFIExternalValueHolder:
FFIExternalValueHolder subclass: #MyIntPtr
and then implement typeDecl class method
MyIntPtr class>>typeDecl
^ ���int'
and this will work as the anonymous class
2) Replace "int *��� in your function calls with your new type:
glGetAttribute: attr into: value
3) pass an instance of INT_PTR to get the value:
| ptr value |
ptr := INT_PTR new.
self glGetAttribute: anAttributeIDontKnow into: ptr.
value := ptr value.
Esteban