5.3.6

The Racket Foreign Interface

Eli Barzilay

 (require ffi/unsafe)

The ffi/unsafe library enables the direct use of C-based APIs within Racket programs—without writing any new C code. From the Racket perspective, functions and data with a C-based API are foreign, hence the term foreign interface. Furthermore, since most APIs consist mostly of functions, the foreign interface is sometimes called a foreign function interface, abbreviated FFI.

    1 Overview

      1.1 Libraries, C Types, and Objects

      1.2 Function-Type Bells and Whistles

      1.3 By-Reference Arguments

      1.4 C Structs

      1.5 Pointers and Manual Allocation

      1.6 Pointers and GC-Managed Allocation

      1.7 Reliable Release of Resources

      1.8 More Examples

    2 Loading Foreign Libraries

    3 C Types

      3.1 Type Constructors

      3.2 Numeric Types

      3.3 Other Atomic Types

      3.4 String Types

        3.4.1 Primitive String Types

        3.4.2 Fixed Auto-Converting String Types

        3.4.3 Variable Auto-Converting String Type

        3.4.4 Other String Types

      3.5 Pointer Types

      3.6 Function Types

        3.6.1 Custom Function Types

      3.7 C Struct Types

      3.8 C Array Types

      3.9 C Union Types

      3.10 Enumerations and Masks

    4 Pointer Functions

      4.1 Pointer Dereferencing

      4.2 Memory Management

      4.3 Pointer Structure Property

    5 Derived Utilities

      5.1 Safe Homogenous Vectors

      5.2 Safe C Vectors

      5.3 Tagged C Pointer Types

      5.4 Defining Bindings

      5.5 Allocation and Finalization

      5.6 Custodian Shutdown Registration

      5.7 Atomic Execution

      5.8 Speculatively Atomic Execution

      5.9 Objective-C FFI

        5.9.1 FFI Types and Constants

        5.9.2 Syntactic Forms and Procedures

        5.9.3 Raw Runtime Functions

        5.9.4 Legacy Library

      5.10 Cocoa Foundation

        5.10.1 Strings

        5.10.2 Allocation Pools

      5.11 COM (Common Object Model)

        5.11.1 COM Automation

          5.11.1.1 GUIDs, CLSIDs, IIDs, and ProgIDs

          5.11.1.2 COM Objects

          5.11.1.3 COM Methods

          5.11.1.4 COM Properties

          5.11.1.5 COM Events

          5.11.1.6 Interface Pointers

          5.11.1.7 Remote COM servers (DCOM)

          5.11.1.8 COM Types

          5.11.1.9 Class Display Names

        5.11.2 COM Classes and Interfaces

          5.11.2.1 Describing COM Interfaces

          5.11.2.2 Obtaining COM Interface References

          5.11.2.3 COM FFI Helpers

          5.11.2.4 COM Interface Example

        5.11.3 ActiveX Controls

      5.12 File Security-Guard Checks

      5.13 Windows API Helpers

    6 Miscellaneous Support

    7 Unexported Primitive Functions

    Bibliography

    Index