%module(directors="1") director_void %warnfilter(SWIGWARN_TYPEMAP_DIRECTOROUT_PTR) voidPtrOut; %feature("director") DirectorVoidPointer; #if defined(SWIGCSHARP) %apply void *VOID_INT_PTR { void * } #endif %inline %{ class DirectorVoidPointer { int *ptr; public: DirectorVoidPointer(int val) : ptr(new int(val)) {} virtual ~DirectorVoidPointer() { delete ptr; } virtual void * voidPtrOut() { return ptr; } virtual int voidPtrIn(void *p) { return nonVirtualVoidPtrIn(p); } void setNewValue(int val) { delete ptr; ptr = new int(val); } void *nonVirtualVoidPtrOut() { return ptr; } int nonVirtualVoidPtrIn(void *p) { int val = *(int *)p; setNewValue(val + 100); return *ptr; } }; struct Caller { int callVirtualIn(DirectorVoidPointer *d, int num) { return d->voidPtrIn(&num); } int callVirtualOut(DirectorVoidPointer *d) { return *(int *)d->voidPtrOut(); } static int VoidToInt(void *p) { return *(int *)p; } }; struct MemberVoid { void *memberVariable; }; %}