A function that is convenient for many interfaces where the foreign library has some naming convention that you want to use in your interface as well. The objname argument can be any value that will be used to name the foreign object; it is first converted into a string, and then modified according to the given substs list in sequence, where each element in this list is a list of a regular expression and a substitution string. Usually, regexp-replace* is used to perform the substitution, except for cases where the regular expression begins with a ^ or ends with a $, in which case regexp-replace is used.
For example, the following makes it convenient to define Racket bindings such as foo-bar for foreign names like MyLib_foo_bar:
(define mylib (ffi-lib "mylib")) (define-syntax defmyobj (syntax-rules (:) [(_ name : type ...) (define name (get-ffi-obj (regexp-replaces 'name '((#rx"-" "_") (#rx"^" "MyLib_"))) mylib (_fun type ...)))])) (defmyobj foo-bar : _int -> _int)
Allocates a memory block of an appropriate size, and initializes it using values from lst and the given type. The lst must hold values that can all be converted to C values according to the given type.
Like list->cblock, but for Racket vectors.
Returns a pointer to an array of _scheme values, which is the internal representation of vec.
Returns a pointer to an array of _double values, which is the internal representation of flvec.
Returns the value most recently saved (in the current thread) after a foreign call with a non-#f #:save-errno option (see _fun and _cprocedure).
Returns a platform-specific value corresponding to a Posix errno symbol. The set of supported symbols is likely to expand in the future.
Converts v from a value matching from-type to a value matching to-type, where (ctype-sizeof from-type) matches (ctype-sizeof to-type).
The conversion is equivalent to
(cblock->list cblock type length) → list? cblock : any/c type : ctype? length : exact-nonnegative-integer?
Converts C cblock, which is a vector of types, to a Racket list. The arguments are the same as in the list->cblock. The length must be specified because there is no way to know where the block ends.
(cblock->vector cblock type length) → vector? cblock : any/c type : ctype? length : exact-nonnegative-integer?
Like cblock->vector, but for Racket vectors.