我是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对象中。