[Cuis-dev] FFI example

Andres Valloud ten at smallinteger.com
Sun Sep 29 18:13:01 PDT 2024


So, how do you know that 'abs' thing is actually a function?

On 9/29/24 5:54 PM, Mark Volkmann via Cuis-dev wrote:
> Ron, thanks so much for the links! I think they got me a bit farther, 
> but I don't have a working example yet. I know this is a somewhat 
> complex topic, but I'm surprised I haven't been able to find a basic 
> working example. I'd love to see something like a C function that takes 
> two numbers and returns their sum. And then see how to call that 
> function from Cuis Smalltalk.
> 
> Here's something I tried to calculate the absolute value of a number 
> using the abs function provided by C and running in macOS where the C 
> library is provided in libSystem.dylib.
> 
> Define the following class:
> 
> ExternalLibrary subclass: #FFIDemo
>      instanceVariableNames: ''
>      classVariableNames: ''
>      poolDictionaries: ''
>      category: 'Volkmann'
> 
> Define the following class method:
> 
> moduleName
>      ^ 'libSystem.dylib'
> 
> Define the following instance methods:
> 
> ffiAbs: anInteger
>      "<calltype: returnType 'functionName' (parameter types list) 
> module: 'libraryName'>"
>      <cdecl: long 'abs' (long) module: 'libSystem.dylib'>
>      ^self externalCallFailed
> 
> callIt: aNumber
>      | meth |
> meth := ExternalLibraryFunction
> name: 'ffiAbs'
> module: FFIDemo moduleName
> callType: 0
> returnType: ExternalType int32
> argumentTypes: #(ExternalType int32).
>   ^ meth invokeWith: aNumber.
> 
> Test it like this:
> 
> demo := FFIDemo new.
> (demo callIt: -2) print. "expecting 2"
> 
> This gives "Error: Unable to find function address".
> 
> On Sun, Sep 29, 2024 at 5:00 PM Ron Teitelbaum <ron at 3dicc.com 
> <mailto:ron at 3dicc.com>> wrote:
> 
>     This looks helpful too
> 
>     http://forum.world.st/About-Squeak-s-FFI-package-ported-to-Cuis-
>     td4663852.html <http://forum.world.st/About-Squeak-s-FFI-package-
>     ported-to-Cuis-td4663852.html>
> 
>     and this:
> 
>     https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/master/
>     Packages/System/Tests-FFI.pck.st <https://github.com/Cuis-Smalltalk/
>     Cuis-Smalltalk-Dev/blob/master/Packages/System/Tests-FFI.pck.st>
> 
>     All the best,
> 
>     *Ron Teitelbaum
>     */Chief Executive Officer
>     /*3D Immersive Collaboration Corp*
>     ron at 3dicc.com <mailto:ron at 3dicc.com>
>     www.3dicc.com <http://www.3dicc.com/>
> 
>     <https://www.facebook.com/3DICC> <https://twitter.com/RonTeitelbaum>
>     <https://www.linkedin.com/in/ronteitelbaum>
> 
> 
> 
>     On Sun, Sep 29, 2024 at 5:54 PM Ron Teitelbaum <ron at 3dicc.com
>     <mailto:ron at 3dicc.com>> wrote:
> 
>         This may help too:
> 
>         https://wiki.squeak.org/squeak/1414 <https://wiki.squeak.org/
>         squeak/1414>
> 
>         All the best,
> 
>         *Ron Teitelbaum
>         */Chief Executive Officer
>         /*3D Immersive Collaboration Corp*
>         ron at 3dicc.com <mailto:ron at 3dicc.com>
>         www.3dicc.com <http://www.3dicc.com/>
> 
>         <https://www.facebook.com/3DICC> <https://twitter.com/
>         RonTeitelbaum> <https://www.linkedin.com/in/ronteitelbaum>
> 
> 
> 
>         On Sun, Sep 29, 2024 at 5:50 PM Ron Teitelbaum <ron at 3dicc.com
>         <mailto:ron at 3dicc.com>> wrote:
> 
>             Maybe this:
> 
>             <https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/
>             master/Documentation/Technical/
>             AQuickOrientationToFFIFromSmalltalk.md <https://github.com/
>             Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/master/Documentation/
>             Technical/AQuickOrientationToFFIFromSmalltalk.md>>
> 
>             and
> 
>             <https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/
>             master/Documentation/Technical/FFIorVMPluginsWhatToUse.md
>             <https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/
>             master/Documentation/Technical/FFIorVMPluginsWhatToUse.md>>
> 
> 
>             All the best,
> 
>             *Ron Teitelbaum
>             */Chief Executive Officer
>             /*3D Immersive Collaboration Corp*
>             ron at 3dicc.com <mailto:ron at 3dicc.com>
>             www.3dicc.com <http://www.3dicc.com/>
> 
>             <https://www.facebook.com/3DICC> <https://twitter.com/
>             RonTeitelbaum> <https://www.linkedin.com/in/ronteitelbaum>
> 
> 
> 
>             On Sun, Sep 29, 2024 at 5:47 PM Mark Volkmann via Cuis-dev
>             <cuis-dev at lists.cuis.st <mailto:cuis-dev at lists.cuis.st>> wrote:
> 
>                 Which documentation are you referring to? I don't see a
>                 separate repository related to FFI at https://
>                 github.com/Cuis-Smalltalk <https://github.com/Cuis-
>                 Smalltalk>.
>                 I do see this, but no documentation in it: https://
>                 github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/
>                 master/Packages/System/FFI.pck.st <https://github.com/
>                 Cuis-Smalltalk/Cuis-Smalltalk-Dev/blob/master/Packages/
>                 System/FFI.pck.st>
> 
>                 On Sun, Sep 29, 2024 at 2:15 PM Andres Valloud via Cuis-
>                 dev <cuis-dev at lists.cuis.st <mailto:cuis-
>                 dev at lists.cuis.st>> wrote:
> 
>                     Before you start, make sure you go through the FFI
>                     doc at github.
> 
>                     On 9/29/24 6:58 AM, Mark Volkmann via Cuis-dev wrote:
>                      > Can someone point me to an example of using FFI
>                     to call a C function in
>                      > Cuis Smalltalk?
>                      > I've looked at the code in the FFI package, but I
>                     don't see any examples
>                      > or tests.
>                      > I've also spent time searching the web for
>                     examples and came up empty.
>                      >
>                      > --
>                      > R. Mark Volkmann
>                      > Object Computing, Inc.
>                      >
> 
>                     -- 
>                     Cuis-dev mailing list
>                     Cuis-dev at lists.cuis.st <mailto:Cuis-dev at lists.cuis.st>
>                     https://lists.cuis.st/mailman/listinfo/cuis-dev
>                     <https://lists.cuis.st/mailman/listinfo/cuis-dev>
> 
> 
> 
>                 -- 
>                 R. Mark Volkmann
>                 Object Computing, Inc.
>                 -- 
>                 Cuis-dev mailing list
>                 Cuis-dev at lists.cuis.st <mailto:Cuis-dev at lists.cuis.st>
>                 https://lists.cuis.st/mailman/listinfo/cuis-dev
>                 <https://lists.cuis.st/mailman/listinfo/cuis-dev>
> 
> 
> 
> -- 
> R. Mark Volkmann
> Object Computing, Inc.
> 



More information about the Cuis-dev mailing list