aboutsummaryrefslogtreecommitdiff
path: root/Examples/ocaml/callback/runme.ml
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/ocaml/callback/runme.ml')
-rw-r--r--Examples/ocaml/callback/runme.ml30
1 files changed, 30 insertions, 0 deletions
diff --git a/Examples/ocaml/callback/runme.ml b/Examples/ocaml/callback/runme.ml
new file mode 100644
index 000000000..ddc974984
--- /dev/null
+++ b/Examples/ocaml/callback/runme.ml
@@ -0,0 +1,30 @@
+(* file: runme.ml
+
+This file illustrates cross-language polymorphism using directors. *)
+
+open Swig
+open Example
+
+let new_OCamlCallback ob meth args =
+ match meth with
+ | "run" -> print_endline "OCamlCallback.run()"; C_void
+ | _ -> (invoke ob) meth args
+
+let caller = new_Caller '()
+
+let _ = print_endline "Adding and calling a normal C++ callback"
+let _ = print_endline "----------------------------------------"
+
+let callback = new_Callback '()
+let _ = caller -> "setCallback" (callback)
+let _ = caller -> "call" ()
+let _ = caller -> "delCallback" ()
+
+let _ = print_endline "\nAdding and calling an OCaml callback"
+let _ = print_endline "------------------------------------"
+
+let callback = new_derived_object new_Callback (new_OCamlCallback) '()
+let _ = caller -> "setCallback" (callback)
+let _ = caller -> "call" ()
+let _ = caller -> "delCallback" ()
+let _ = print_endline "\nOCaml exit"