.h file ------ class MyThing { public: MyThing(); void Insert(int a); int Get(); ~MyThing(); } .cpp file ------ // make sure the .dll for the declspec(DLLEXPORT) void *MyThing_Create(void) { MyClass *p = new MyClass(); return p; } declspec(DLLEXPORT) void MyThing_Insert(void *InstancePtr,int a) { MyClass *p = (MyClass *) InstancePtr; p->Insert(a); } declspec(DLLEXPORT) int MyThing_Get(void *InstancePtr) { MyClass *p = (MyClass *) InstancePtr return p->Get(); } declsepc(DLLEXPORT) void MyThing_Delete(void *instancePtr) { MyClass *p = (MyClass *) InstancePtr; delete p; } .cs file -------- [DllImport("MyClass.dll", EntryPoint="Insert", ExactSpelling=false, SetLastError=true)] static extern void MyThingInsert( [MarshalAs(UnmanagedType.IntPtr] IntPtr InstancePtr, [MarshalAs(UnmanagedType.Int32] Int32 data); // etc for each one of these then make a class like this class MyThing { private IntPtr instanceptr; public MyThing() { instanceptr = MyThing_Create(); } public Insert(int data) { MyThing_Insert(instanceptr,data); } // and so on }