27 lines
897 B
Text
27 lines
897 B
Text
(import (otus ffi))
|
|
|
|
(define libc (or
|
|
(load-dynamic-library "libc.so") ; General Posix
|
|
(load-dynamic-library "libc.so.6") ; Linux
|
|
(load-dynamic-library "libc.so.6.1") ; Linux (DEC Alpha)
|
|
(load-dynamic-library "libc.so.7") ; Latest *BSD
|
|
(load-dynamic-library "libSystem.B.dylib") ; macOS / Darwin
|
|
(load-dynamic-library "shlwapi.dll") )) ; Windows
|
|
|
|
(define lib2
|
|
(load-dynamic-library "kernel32.dll")) ; Windows
|
|
|
|
(define strdup
|
|
(let ((strdup (or
|
|
(libc type-vptr "strdup" type-string) ; All
|
|
(libc type-vptr "StrDupA" type-string))) ; Win
|
|
(free (or
|
|
(libc fft-void "free" type-vptr) ; All
|
|
(lib2 fft-void "LocalFree" type-vptr)))) ; Win
|
|
(lambda (str)
|
|
(let*((dupped (strdup str))
|
|
(result (vptr->string dupped)))
|
|
(free dupped)
|
|
result))))
|
|
|
|
(print (strdup "Hello World!"))
|