Anonymous user
Call a function in a shared library: Difference between revisions
m
→{{header|Ol}}
m (→{{header|Phix}}: added syntax colouring, marked p2js incompatible) |
m (→{{header|Ol}}) |
||
Line 1,421:
=={{header|Ol}}==
Simplest case. Will produce memory leak, because no C "free" function called for dupped string. Useful when no "free" function call required.
<lang scheme>
(import (otus ffi))
(define self (load-dynamic-library #f))
(define strdup
(self type-string "strdup" type-string))
(lambda (str)▼
(define strduX (or▼
</lang>
(self type-string "strduX" type-string)▼
A bit complex case. No memory leaks, because "free" function called for dupped string.
<lang scheme>
(import (otus ffi))
(define self (load-dynamic-library #f))
(free (self fft-void "free" type-vptr)))
▲ (lambda (str)
(let*((dupped (strdup str))
(result (vptr->string dupped)))
(free dupped)
result))))
(print (strdup "Hello World!"))
▲(print (strduX "Hello World!"))
</lang>
{{Out}}
<pre>
Hello World!
</pre>
|