import.sml 650 B

123456789101112131415161718192021222324
  1. (* main.sml *)
  2. (* Declare ffi to be implemented by calling the C function ffi. *)
  3. val ffi = _import "ffi" public: real array * int * int ref * char ref * int -> char;
  4. open Array
  5. val size = 10
  6. val a = tabulate (size, fn i => real i)
  7. val ri = ref 0
  8. val rc = ref #"0"
  9. val n = 17
  10. (* Call the C function *)
  11. val c = ffi (a, Array.length a, ri, rc, n)
  12. (* FFI_INT is declared as public in ffi-import.c *)
  13. val (nGet, nSet) = _symbol "FFI_INT" public: (unit -> int) * (int -> unit);
  14. val _ = print (concat [Int.toString (nGet ()), "\n"])
  15. val _ =
  16. print (if c = #"c" andalso !ri = 45 andalso !rc = c
  17. then "success\n"
  18. else "fail\n")