diff options
author | Art Yerkes <ayerkes@speakeasy.net> | 2003-12-05 22:58:56 +0000 |
---|---|---|
committer | Art Yerkes <ayerkes@speakeasy.net> | 2003-12-05 22:58:56 +0000 |
commit | 4639f09df5f811c61d664d612382d03df6af457b (patch) | |
tree | 4f31984b84ae445c21bf48b51b4641d2310afe13 /Examples/ocaml | |
parent | ac0be15578c1b74fcd874c6ae9feb30f2ee44ceb (diff) | |
download | swig-4639f09df5f811c61d664d612382d03df6af457b.tar.gz |
Added string-from-ptr example.
-- Response to a question asked by Thaddeus L. Olczyk
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5489 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Examples/ocaml')
-rw-r--r-- | Examples/ocaml/string_from_ptr/Makefile | 34 | ||||
-rw-r--r-- | Examples/ocaml/string_from_ptr/example_prog.ml | 23 | ||||
-rw-r--r-- | Examples/ocaml/string_from_ptr/foolib.i | 16 |
3 files changed, 73 insertions, 0 deletions
diff --git a/Examples/ocaml/string_from_ptr/Makefile b/Examples/ocaml/string_from_ptr/Makefile new file mode 100644 index 000000000..504898a7d --- /dev/null +++ b/Examples/ocaml/string_from_ptr/Makefile @@ -0,0 +1,34 @@ +TOP = ../.. +SWIG = $(TOP)/../swig +SWIGOPT = -c++ +SRCS = +TARGET = example +INTERFACE = foolib.i +MLFILE = foolib.ml +PROGFILE = example_prog.ml +OBJS = + +all:: static static_top + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \ + MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \ + ocaml_static_cpp + +static_top:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \ + MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \ + ocaml_static_cpp_toplevel + +dynamic:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' + MLFILE='$(MLFILE)' PROGFILE='$(PROGFILE)' OBJS='$(OBJS)' \ + ocaml_dynamic_cpp + +clean:: + $(MAKE) -f $(TOP)/Makefile MLFILE='$(MLFILE)' ocaml_clean + +check: all diff --git a/Examples/ocaml/string_from_ptr/example_prog.ml b/Examples/ocaml/string_from_ptr/example_prog.ml new file mode 100644 index 000000000..8069dc228 --- /dev/null +++ b/Examples/ocaml/string_from_ptr/example_prog.ml @@ -0,0 +1,23 @@ +(* foo_program.ml -- the program using foolib *) + +open Swig (* Give access to the swig library *) +open Foolib (* This is the name of your swig output *) + +let results = _foo '() (* Function names are prefixed with _ in order to make + them lex as identifiers in ocaml. Consider that + uppercase identifiers are module names in ocaml. + NOTE: the '() syntax is part of swigp4. You can do: + let results = _foo C_void *) + +(* Since your function has a return value in addition to the string output, + you'll need to match them as a list *) + +let result_string = + match results with + C_list [ C_string result_string ; C_int 0 ] -> (* The return value is + last when out arguments appear, but this too can be customized. + We're also checking that the function succeeded. *) + result_string + | _ -> raise (Failure "Expected string, int reply from _foo") + +let _ = print_endline result_string diff --git a/Examples/ocaml/string_from_ptr/foolib.i b/Examples/ocaml/string_from_ptr/foolib.i new file mode 100644 index 000000000..86e0880eb --- /dev/null +++ b/Examples/ocaml/string_from_ptr/foolib.i @@ -0,0 +1,16 @@ +%module foolib +%{ +static int foo( char **buf ) { + *buf = "string from c"; + return 0; +} +%} + +%typemap(in,numinputs=0) char **buf (char *temp) { + $1 = &temp; +} +%typemap(argout) char **buf { + swig_result = caml_list_append(swig_result,caml_val_string((char *)*$1)); +} + +int foo( char **buf ); |