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:
parent
f0826f2391
commit
eac7c92248
6 changed files with 103 additions and 0 deletions
14
Examples/csharp/funcptr/.cvsignore
Normal file
14
Examples/csharp/funcptr/.cvsignore
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
runme
|
||||||
|
*_wrap.c
|
||||||
|
*_wrap.cxx
|
||||||
|
*.iltmp
|
||||||
|
*.cs
|
||||||
|
*.dll
|
||||||
|
*.dsw
|
||||||
|
*.exp
|
||||||
|
*.lib
|
||||||
|
*.ncb
|
||||||
|
*.opt
|
||||||
|
*.plg
|
||||||
|
Release
|
||||||
|
Debug
|
||||||
20
Examples/csharp/funcptr/Makefile
Normal file
20
Examples/csharp/funcptr/Makefile
Normal 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
|
||||||
19
Examples/csharp/funcptr/example.c
Normal file
19
Examples/csharp/funcptr/example.c
Normal 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;
|
||||||
7
Examples/csharp/funcptr/example.h
Normal file
7
Examples/csharp/funcptr/example.h
Normal 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);
|
||||||
|
|
||||||
16
Examples/csharp/funcptr/example.i
Normal file
16
Examples/csharp/funcptr/example.i
Normal 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);
|
||||||
|
|
||||||
27
Examples/csharp/funcptr/runme.cs
Normal file
27
Examples/csharp/funcptr/runme.cs
Normal 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() );
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue