C++/CLI:如何用虚拟方法包装非托管类以进行托管并使用C#中的方法

C++/CLI: How wrap unmanaged class with virtual methods to managed and use that from C#?

本文关键字:方法 虚拟 何用 CLI 包装 C++      更新时间:2023-10-16

我是C++/CLI的新手,我想知道如何用虚拟方法包装非托管C++类以进行托管并使用C#中的方法?

非托管C++类:

class IProgression
{
public:
    virtual ~IProgression(void) {}
    virtual void sendProgression(int amount, int present) = 0;
};

sendProgression方法用于向C#层发送进度信息。所以这是回调。

我有另一个非托管C++类,其中设置了这个进度回调:

virtual void setProgression(IProgression * pIProgression) = 0;

因此,我需要通过C++/CLI将回调接口从C#设置为非托管C++,并通过C++/CCLI将进度信息从非托管C++返回到C#。

既然我对此有点困惑,有人能给我建议如何实施吗?

您可以执行以下操作:

public interface IManagedProgression {
    void SendProgression(int amount, int present);
};
public class Wrapper : public IProgression {
public:
   Wrapper(IManagedProgression^ c)
   {
       callBack = c;
   }

   void sendProgression(int amount, int present)
   {
       callBack->SendProgression(amount, present);
   }
private:
   gcroot<IManagedProgression^> callBack;
};

然后,您可以用C#或其他语言实现IManagedProgression,并将其封装在Wrapper对象中。