C++;C#MVVM中的指针 目前,我正在使用C++库中的一个C语言项目。使用C++库,它们被封装在CLR中。C++和C语言之间的通信方式有两种。p>

C++;C#MVVM中的指针 目前,我正在使用C++库中的一个C语言项目。使用C++库,它们被封装在CLR中。C++和C语言之间的通信方式有两种。p>,c#,c++,mvvm,clr,C#,C++,Mvvm,Clr,我有以下问题。在某个时候,C++调用CLR中的一些函数,这些函数将用具有C++原始指针的对象来引发事件。p> 例如: C++对象 class CObject { private: char* ptr; } CLR对象 ref class CLRObject { public: CLRObject(CObject* p) : m_native(p) {} private: CObject* m_native; } C#对象 现在,由于CSHObject作为事件的参

我有以下问题。在某个时候,C++调用CLR中的一些函数,这些函数将用具有C++原始指针的对象来引发事件。p> 例如:

C++对象

class CObject {
  private:
     char* ptr;
}
CLR对象

ref class CLRObject {
    public: CLRObject(CObject* p) : m_native(p) {}
    private: CObject* m_native;
}
C#对象

现在,由于CSHObject作为事件的参数发送给多个处理程序,因此它们都将获得对同一对象的引用。因此,当其中一个事件处理程序修改该事件传递的对象时,该事件的其他侦听器将获得修改后的对象

例如:

C++创建对象:

void updateListeners() {
    updateListener(new CObject());
}
CLR覆盖更新侦听器:

void updateListener(CObject* obj) {
     m_wrapper->updateListener(gcnew CLRObject(obj))
}
C#将发起活动:

public event EventHandler<MyEventArgs> MyEvent;
void updateListener(CLRObject obj) {
    MyEvent?.Invoke(this, new MyEventArgs(new CSHObject(obj)));
}
公共事件处理程序MyEvent;
void updateListener(CLR对象obj){
MyEvent?.Invoke(这个,新的MyEventArgs(新的CSHObject(obj));
}
现在我的问题是,我们应该如何处理这些事件?从MVVM的角度来看。因为在本例中,CLR对象是模型,但同一模型在多个视图模型之间共享。我认为这不是MVVM的正确方式

因此:

  • 是否所有事件侦听器都应该创建自己的模型并从CLR对象复制所需的信息

  • 每个事件侦听器是否创建对象的深层副本

  • 目前的实施方式是正确的,我不应该改变

  • Obs:

  • 我对C#,CLR不太了解
  • 所有的示例代码都是虚构的,因为真正的代码太长,并且包含很多其他内容

  • 事件参数包含将信息发送回C++的任何东西吗?例如,代码> BoOL CaseLeVelue</C>,或者任何方法都可以调用,这些方法在C++中有效果,@本事件不包含任何将信息发送回C++的东西。但是在C++中还有其他的方法。例如,更改C++对象的数据成员的方法。
    public event EventHandler<MyEventArgs> MyEvent;
    void updateListener(CLRObject obj) {
        MyEvent?.Invoke(this, new MyEventArgs(new CSHObject(obj)));
    }