在托管和非托管代码中使用事件

时间:2019-03-18 09:12:58

标签: c++ events visual-studio-2017 clr managed-c++

我主要从事非托管代码的工作,最近我的工作必须使用CLI / C ++项目。有些文件是非托管代码,因此在包含这些文件的同时,我使用#pragma managed(push, off) 我在完整的非托管代码中看到我们一直在Ref类中使用event和deligate。

event someHandler^ someEvent;
public delegate void someHandler(ManagedCpp::sharedPtr<std::string> ^);

但是现在我需要为托管和非托管混合创建相同的机制。因此,当我将Model视图类设为托管类时,我无法将其包含在非托管类中。

我将在其中定义事件并委托的托管类...

public delegate void someHandler(ManagedCpp::sharedPtr<std::string> ^);
    class ModelView{
       managedCpp::sharedPtr ^ memberPtr
     public:
       event someHandler^ someEvent;
       ModelView(){
          memberPtr= gcnew managedCpp::sharedPtr<std::string>
       }
       //some other functions
       // a getter() to get the memberPtr
       // a setter() to set the value of memberPtr
    }

因此,我需要将此类包含在其他一些类别中,这些类别中有些是托管的,而有些则是非托管的。

当我将其包含在托管类中时,它将引发错误。

error C3821: 'memberPtr': managed type or function cannot be used in an unmanaged function

任何人都可以帮助我如何解决遇到的问题吗?

0 个答案:

没有答案