C++/CLI - Managed class to C# events

前端 未结 3 1944
别跟我提以往
别跟我提以往 2021-01-21 20:31

I have a c++ class that triggers some method like an event.

class Blah {

   virtual void Event(EventArgs e);
}

How can I wrap it so whenever t

3条回答
  •  甜味超标
    2021-01-21 21:38

    Something like this (now compile-tested):

    #include 
    
    struct blah_args
    {
        int x, y;
    };
    
    struct blah
    {
        virtual void Event(const blah_args& e) = 0;
    };
    
    public ref class BlahEventArgs : public System::EventArgs
    {
    public:
        int x, y;
    };
    
    public ref class BlahDotNet
    {
    public:
        event System::EventHandler^ ItHappened;
    internal:
        void RaiseItHappened(BlahEventArgs^ e) { ItHappened(this, e); }
    };
    
    class blah_event_forwarder : public blah
    {
        gcroot m_managed;
    
    public:
        blah_event_forwarder(BlahDotNet^ managed) : m_managed(managed) {}
    
    protected:
        virtual void Event(const blah_args& e)
        {
            BlahEventArgs^ e2 = gcnew BlahEventArgs();
            e2->x = e.x;
            e2->y = e.y;
            m_managed->RaiseItHappened(e2);
        }
    };
    

提交回复
热议问题