RosettaCodeData/Task/Call-a-function-in-a-shared-library/Ol/call-a-function-in-a-shared-library-2.ol
2026-02-01 16:33:20 -08:00

19 lines
579 B
Text

(import (otus ffi))
(define self (load-dynamic-library #f))
(define strdup
(let ((strdup (self type-vptr "strdup" type-string))
(free (self fft-void "free" type-vptr)))
(if (and strdup free)
; we have both native functions
(lambda (str)
(let*((dupped (strdup str))
(result (vptr->string dupped)))
(free dupped)
result))
; windows doesn't have strdup and free, so...
(lambda (str)
(list->string (string->list str))))))
(print (strdup "Hello World!"))