C++;C#MVVM中的指针 目前,我正在使用C++库中的一个C语言项目。使用C++库,它们被封装在CLR中。C++和C语言之间的通信方式有两种。p>
我有以下问题。在某个时候,C++调用CLR中的一些函数,这些函数将用具有C++原始指针的对象来引发事件。p> 例如: C++对象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作为事件的参
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的正确方式
因此:
事件参数包含将信息发送回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)));
}