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@5489 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
3631c27ad3
commit
dc36dabaea
3 changed files with 73 additions and 0 deletions
34
SWIG/Examples/ocaml/string_from_ptr/Makefile
Normal file
34
SWIG/Examples/ocaml/string_from_ptr/Makefile
Normal file
|
|
@ -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
|
||||
23
SWIG/Examples/ocaml/string_from_ptr/example_prog.ml
Normal file
23
SWIG/Examples/ocaml/string_from_ptr/example_prog.ml
Normal file
|
|
@ -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
|
||||
16
SWIG/Examples/ocaml/string_from_ptr/foolib.i
Normal file
16
SWIG/Examples/ocaml/string_from_ptr/foolib.i
Normal file
|
|
@ -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 );
|
||||
Loading…
Add table
Add a link
Reference in a new issue