Interop between C++ and C# via C++/CLI with callbacks
I'm not sure about the callbacks but you are using the destructor/finalizer in a way that might cause problems.


   ~WrapperClass()
    {
        this-&gt;!WrapperClass();
    };

    !WrapperClass()
    {
        if (m_native != nullptr)
            delete m_native;
    };



If you are doing this then the descructor should call GC.SuppressFinalize(this); because the finalizer has already been called.

Then in your finalizer you should set the m_native = nullptr; because if the GC calls it again later it will crash as the object has been deleted but it's still pointing to it.

    !WrapperClass()
    {
        if (m_native != nullptr)
        {
            delete m_native;
            m_native = nullptr;
        }
    }


As to the m_native I'd call it _nativePtr.