Function pointer example just like the other languages

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4528 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2003-03-12 20:46:41 +00:00
parent f0826f2391
commit eac7c92248
6 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,14 @@
runme
*_wrap.c
*_wrap.cxx
*.iltmp
*.cs
*.dll
*.dsw
*.exp
*.lib
*.ncb
*.opt
*.plg
Release
Debug

View File

@ -0,0 +1,20 @@
TOP = ../..
SWIG = $(TOP)/../swig
SRCS = example.c
TARGET = example
INTERFACE = example.i
SWIGOPT =
CSHARPSRCS = *.cs
CSHARPFLAGS= -o runme
all:: csharp
csharp::
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' csharp
$(MAKE) -f $(TOP)/Makefile CSHARPSRCS='$(CSHARPSRCS)' CSHARPFLAGS='$(CSHARPFLAGS)' csharp_compile
clean::
$(MAKE) -f $(TOP)/Makefile csharp_clean
check: all

View File

@ -0,0 +1,19 @@
/* File : example.c */
int do_op(int a, int b, int (*op)(int,int)) {
return (*op)(a,b);
}
int add(int a, int b) {
return a+b;
}
int sub(int a, int b) {
return a-b;
}
int mul(int a, int b) {
return a*b;
}
int (*funcvar)(int,int) = add;

View File

@ -0,0 +1,7 @@
/* file: example.h */
extern int do_op(int,int, int (*op)(int,int));
extern int add(int,int);
extern int sub(int,int);
extern int mul(int,int);

View File

@ -0,0 +1,16 @@
/* File : example.i */
%module example
%{
#include "example.h"
%}
/* Wrap a function taking a pointer to a function */
extern int do_op(int a, int b, int (*op)(int, int));
/* Now install a bunch of "ops" as constants */
%constant int (*ADD)(int,int) = add;
%constant int (*SUB)(int,int) = sub;
%constant int (*MUL)(int,int) = mul;
extern int (*funcvar)(int,int);

View File

@ -0,0 +1,27 @@
using System;
using System.Reflection;
public class runme {
public static void Main(String[] args) {
int a = 37;
int b = 42;
// Now call our C function with a bunch of callbacks
Console.WriteLine( "Trying some C callback functions" );
Console.WriteLine( " a = " + a );
Console.WriteLine( " b = " + b );
Console.WriteLine( " ADD(a,b) = " + example.do_op(a,b,example.ADD) );
Console.WriteLine( " SUB(a,b) = " + example.do_op(a,b,example.SUB) );
Console.WriteLine( " MUL(a,b) = " + example.do_op(a,b,example.MUL) );
Console.WriteLine( "Here is what the C callback function classes are called in C#" );
Console.WriteLine( " ADD = " + example.ADD.GetType() );
Console.WriteLine( " SUB = " + example.SUB.GetType() );
Console.WriteLine( " MUL = " + example.MUL.GetType() );
}
}