首页 > 解决方案 > 在托管和非托管代码中使用事件

问题描述

我主要处理非托管代码,最近我必须使用 CLI/C++ 项目。一些文件是非托管代码,所以当我使用#pragma managed(push, off) 完整的非托管代码时,我们一直在 Ref 类中使用 event 和 deligate。

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

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

托管课程,我将在其中挑战事件并委托...

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

谁能帮我解决这个遇到的问题?

标签: c++eventsvisual-studio-2017clrmanaged-c++

解决方案


推荐阅读