blob: 936553353f2a89aecc62fc13b056e4906e1bf578 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
(***********************************************************************)
(* *)
(* OCaml *)
(* *)
(* Alain Frisch, LexiFi *)
(* *)
(* Copyright 2007 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* under the terms of the Q Public License version 1.0. *)
(* *)
(***********************************************************************)
let f x = print_string "This is Main.f\n"; x
let () = Registry.register f
let _ =
Dynlink.init ();
Dynlink.allow_unsafe_modules true;
for i = 1 to Array.length Sys.argv - 1 do
let name = Sys.argv.(i) in
Printf.printf "Loading %s\n" name; flush stdout;
try
if name.[0] = '-'
then Dynlink.loadfile_private
(String.sub name 1 (String.length name - 1))
else Dynlink.loadfile name
with
| Dynlink.Error err ->
Printf.printf "Dynlink error: %s\n"
(Dynlink.error_message err)
| exn ->
Printf.printf "Error: %s\n" (Printexc.to_string exn)
done;
flush stdout;
try
let oc = open_out_bin "marshal.data" in
Marshal.to_channel oc (Registry.get_functions()) [Marshal.Closures];
close_out oc;
let ic = open_in_bin "marshal.data" in
let l = (Marshal.from_channel ic : (int -> int) list) in
close_in ic;
List.iter
(fun f ->
let res = f 0 in
Printf.printf "Result is: %d\n" res)
l
with Failure s ->
Printf.printf "Failure: %s\n" s
|