**unmanaged class** this is the unmanaged class declaration
#ifdef EXPORT_CLASS #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif public class DLL_EXPORT cppclass { private: string x; public: cppclass(); ~cppclass(); string native(); }; **UNMANAGED CLASS DEFINITION** this is the unmanaged class definition
cppclass::cppclass() { x="hello"; }; cppclass::~cppclass() { }; string cppclass::native() { return x; }; **MANAGED CLASS** this is the managed class declaration
public __gc class Mclass { //private: public: cppclass * obj; public: Mclass(); ~Mclass(); string native(); };
**MANAGED CLASS DEFINITION** //this is the managed class definition
#include"managed.h" Mclass::Mclass() { obj=new cppclass(); }; Mclass::~Mclass() { delete obj; }; string Mclass::native() { return obj->native(); }; All these four files are in a project which is made into a dll.Now how to use it in a c# project
public ref classso it is visible outside of the assembly. And you must implement a finalizer so you don't leak memory when the client code doesn't call Dispose(). And your native() method should check if obj wasn't deleted.