FFI in chez scheme
unknown
scheme
2 years ago
801 B
3
Indexable
(load-shared-object "kernel32.dll") (define GetCurrentDirectoryW (foreign-procedure "GetCurrentDirectoryW" (unsigned-32 (* wchar)) unsigned-32)) (define (foreign-wchar-buffer->string buf) (with-output-to-string (lambda () (let loop ((i 0)) (let ((ch (ftype-ref wchar () buf i))) (when (not (char=? ch #\nul)) (write-char ch) (loop (+ i 1)))))))) (define (get-current-directory) (let* ((bufferlen 1024) (lpBuffer (make-ftype-pointer wchar (foreign-alloc (* bufferlen (ftype-sizeof wchar))))) (retval (GetCurrentDirectoryW bufferlen lpBuffer)) (dirname (foreign-wchar-buffer->string lpBuffer))) (foreign-free (ftype-pointer-address lpBuffer)) (values retval dirname)))
Editor is loading...